<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="description" content="GoJS changelog." />
  <meta http-equiv="cache-control" content="no-cache">
  <title>GoJS Change Log</title>
  <!-- Copyright 1998-2016 by Northwoods Software Corporation. -->
  <script>
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

    ga('create', 'UA-1506307-5', 'auto');
    ga('send', 'pageview');

  </script>

  <link rel="stylesheet" href="../assets/css/bootstrap.min.css">
  <!-- custom CSS after bootstrap -->
  <link href="../assets/css/main.css" rel="stylesheet" type="text/css"/>

</head>

<style type="text/css">
  #container {
    max-width: 60em;
  }
</style>

<script src="../release/go.js"></script>
<script src="../assets/js/goDoc.js"></script>
</head>

<body onload="goDoc()">

<div class="container">

  <!-- Fixed navbar -->
  <nav class="navbar navbar-inverse navbar-fixed-top">
    <div class="container">
      <div class="navbar-header">
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <!--<a class="navbar-brand" href="#">GoJS</a>-->
      </div>
      <div id="navbar" class="navbar-collapse collapse">
        <ul class="nav navbar-nav navbar-right">
          <li class="active"><a href="../index.html">Home</a></li>
          <li><a href="../learn/index.html">Learn</a></li>
          <li><a href="../samples/index.html">Samples</a></li>
          <li><a href="../intro/index.html">Intro</a></li>
          <li><a href="../api/index.html">API</a></li>
          <li><a href="https://www.nwoods.com/components/evalform.htm">Register</a></li>
          <li><a href="../doc/download.html">Download</a></li>
          <li><a href="https://forum.nwoods.com/c/gojs">Forum</a></li>
          <li><a href="https://www.nwoods.com/support/query.htm">Contact</a></li>
          <li class="buy"><a href="https://www.nwoods.com/sales/ordering.htm">Buy</a></li>
          <li class="activate"><a href="https://www.nwoods.com/app/activate.aspx?sku=gojs">Activate</a></li>
        </ul>
      </div><!--/.nav-collapse -->
    </div>
  </nav>

</div>

<div class="container-fluid mt30" id="container">
  <div class="row mt30">
    <h2>GoJS Change Log</h2>
    <script>
      if (go && go.version) {
        document.write("Version: " + go.version);
      }
    </script>
  </div>

  <h4>Changes for 1.6.10</h4>
  <ul>
    <li>Fixed an SVG rendering bug that was introduced in 1.6.8.</li>
    <li><a>Shape.geometryString</a> setter no longer offsets the position, instead it sets it, always overwriting the old position.</li>
    <li>Extended/fixed <a>Diagram.updateAllRelationshipsFromData</a> to handle added node data in the <a>Model.nodeDataArray</a> and link data in the <a>GraphLinksModel.linkDataArray</a>.</li>
    <li>Extended <a>Tool.standardMouseClick</a> to return a boolean, true if <a>InputEvent.handled</a> had been set to true by an event handler.</li>
    <li>Fixed <a>ContextMenuTool</a> not to show a context menu <a>Adornment</a> if a <a>GraphObject.contextClick</a> or <a>Diagram.contextClick</a> event handler set <a>InputEvent.handled</a> to true.</li>
    <li>Fixed mouse move events on IE9.</li>
    <li>Fixed an infrequent scrolling issue sometimes seen at the edges of a Diagram.</li>
  </ul>

  <h4>Changes for 1.6.9</h4>
  <ul>
    <li>Fixes and improvements to samples.</li>
  </ul>

  <h4>Changes for 1.6.8</h4>
  <ul>
    <li>Fixed how <a>Diagram.findNodesByExample</a> and <a>Diagram.findLinksByExample</a> compared Arrays</li>
    <li>Fixed link routing in some cases where there was a TwoWay <a>Binding</a> on <a>Link.points</a> with non-trivial conversions.</li>
    <li>Improved link routing when <a>Link.adjusting</a> is <a>Link.Scale</a> after the route is computed to be less than one unit long.</li>
    <li>Fixed unintended modification of model data involving TwoWay <a>Binding</a>s upon an undo after calling or causing <a>Diagram.rebuildParts</a>.</li>
    <li>Fixed rare cases of wrong link routes after undo of a drag.</li>
  </ul>

  <h4>Changes for 1.6.7</h4>
  <ul>
    <li>Extended the <a>ContextMenuTool</a> to work on a right-mouse-down event if the tool is in the <a>ToolManager.mouseDownTools</a> list.</li>
    <li>Changed how the main <a>Shape</a>s of <a>Link</a>s are measured to be more accurate. This may cause Links to have different position and location values than before.</li>
    <li>Fixed a collapse animation bug when rolling back transactions.</li>
  </ul>

  <h4>Changes for 1.6.6</h4>
  <ul>
    <li>Fixed a bug with text measurement when using <a>TextBlock.OverflowEllipsis</a>.</li>
    <li>Fixed a bug with Link geometry construction when switching templates.</li>
    <li>Groups no longer try to update their own bounds when containing links are modified, so long as <a>Group.computesBoundsIncludingLinks</a> is set to false.</li>
  </ul>

  <h4>Changes for 1.6.5</h4>
  <ul>
    <li>Fixed updating of a link geometry when modifying <a>Link.curve</a> or <a>Link.curviness</a>.</li>
    <li>MouseMove events now bubble by default, unless a tool other than the <a>ToolManager</a> is the <a>Diagram.currentTool</a>.</li>
    <li>Fixed the invalidation of custom geometries of <a>Shape</a>s.</li>
    <li>Reduced the shifting of <a>Group</a>s that have a <a>LayeredDigraphLayout</a> as the <a>Group.layout</a> upon repeated collapse/expand.</li>
  </ul>

  <h4>Changes for 1.6.4</h4>
  <ul>
    <li>Wheel scrolling now respects <a>Diagram.allowHorizontalScroll</a> and <a>Diagram.allowVerticalScroll</a> in all code paths.</li>
  </ul>

  <h4>Changes for 1.6.3</h4>
  <ul>
    <li>Fixed an exception in <a>CommandHandler.showContextMenu</a> when passed an argument.</li>
    <li>Fixed adornment invalidation when a Part switches from a visible layer to an invisible one.</li>
    <li>Smoothed <a>Diagram.scale</a> animations.</li>
    <li>On Mac Trackpads, users can now scroll horizontally as well as vertically.</li>
    <li>Improved some samples.</li>
  </ul>

  <h4>Changes for 1.6.2</h4>
  <ul>
    <li>Added the <a href="../extensions/DataInspector.html" target="_blank">Data Inspector</a> sample, a simple drop-in for inspecting and editing Part data.</li>
    <li>Fixed some cases of testing for points being within quadratic bezier curve geometries.</li>
    <li>The <a>ContextMenuTool</a> now supports tooltips for all objects in a context menu <a>Adornment</a>.</li>
  </ul>

  <h4>Changes for 1.6.1</h4>
  <ul>
    <li>Fixed an exception in <code>go-debug.js</code> involving a name conflict caused by minification.</li>
  </ul>

  <h4>Changes for 1.6 since 1.5.*</h4>

  <div style="border: 2px solid #1F4963; padding: 6px; margin-bottom: 30px;">
    <p>GoJS version 1.6 brings several new features and samples. Here are some highlights:</p>
    <ul>
      <li>Z-ordering within <a>Layer</a>s by setting or binding the new <a>Part.zOrder</a> property.</li>
      <li>Animations for tree and <a>Group</a> collapse, and animation of <a>Diagram.position</a> with <a>CommandHandler.scrollToPart</a>.</li>
      <li><a>Link</a>s can now have automatically determined keys if you set the <a>GraphLinksModel.linkKeyProperty</a>.</li>
      <li>You can now send and receive incremental changes to a database instead of sending the whole model,
          with <a>Model.toIncrementalJson</a> and <a>Model.applyIncrementalJson</a>.</li>
      <li>Tooltips are now shown on touch devices when the user clicks on an object with a <a>GraphObject.toolTip</a>
          or in the diagram background when <a>Diagram.toolTip</a> is an <a>Adornment</a>.</li>
    </ul>
  </div>

  <p>Complete list of updates:</p>

  <ul>
    <li>
      <b>Samples and documentation:</b>
      <ul>
        <li>
          Changed the <a href="../extensions/CheckBoxes.html" target="_blank">CheckBoxes</a> sample to make use of the
          newly predefined "CheckBox" panel.  Note the renaming from the old sample's "CheckBoxPanel" to the predefined "CheckBox".
          Another change is that "CheckBox" now respects <a>Diagram.isReadOnly</a> and <a>Model.isReadOnly</a>.
        </li>
        <li>
          Added the <a href="../samples/leaflet.html" target="_blank">Leaflet and GoJS</a> sample,
          demonstrating how to integrate GoJS Diagrams with a mapping library (LeafletJS). The sample shows nodes placed at latitude and longitude locations, depicting train stations and connections on the map.
        </li>
        <li>
          Added the <a href="../samples/absolute.html" target="_blank">Absolute Positioning</a> sample,
          demonstrating how a diagram can be made <em>not</em> to scroll or pan or zoom,
          and to disallow dragging parts outside of a fixed area.
        </li>
        <li>
          Added the <a href="../samples/adornmentButtons.html" target="_blank">Adornment Buttons</a> sample,
          demonstrating showing buttons when a node is selected.
          The buttons can invoke commands with clicks or start tools with drags.
        </li>
        <li>
          Added the <a href="../samples/doubleCircle.html" target="_blank">Double Circle</a> sample,
          demonstrating how to use repeated <a>CircularLayout</a>s to arrange any number of concentric circles of nodes.
        </li>
        <li>
          Added the <a href="../samples/dragUnoccupied.html" target="_blank">Drag Unoccupied</a> sample,
          demonstrating how to customize the <a>Part.dragComputation</a> property so that the user cannot
          drag nodes to overlap any stationary nodes.
        </li>
        <li>
          Added the <a href="../samples/faultTree.html" target="_blank">Fault Tree</a> sample.
        </li>
        <li>
          Added the <a href="../samples/pathAnimation.html" target="_blank">Path Animation</a> sample,
          demonstrating how to animate the traversal of some number of Parts along straight Links.
        </li>
        <li>
          Added the <a href="../samples/radialPartition.html" target="_blank">Radial Partition</a> sample,
          demonstrating how to arrange nodes in segmented rings about a central node.
        </li>
        <li>
          Added the <a href="../samples/relationships.html" target="_blank">Relationships</a> sample,
          demonstrating how to define custom link renderings by using <a>Shape.pathPattern</a> as a repeating pattern along a Shape stroke path.
        </li>
        <li>
          Added the <a href="../samples/stateChartIncremental.html" target="_blank">State Chart Incremental</a> sample,
          demonstrating how to save and replay incremental changes when <a>ChangedEvent.isTransactionFinished</a>
          rather than sending or receiving a whole <a>Model</a>.
        </li>
        <li>
          Added the <a href="../samples/systemDynamics.html" target="_blank">System Dynamics</a> sample,
          demonstrating a modal editing interface, draggable labels, and multiple node and link templates.
        </li>
        <li>
          Added the <a href="../samples/treeMapper.html" target="_blank">Tree Mapper</a> sample,
          demonstrating how to show and allow the user to edit the relationships between nodes in two different trees.
        </li>
        <li>
          Added the <a href="../extensions/CurvedLinkReshaping.html" target="_blank">Simple Curved Link Reshaping Tool</a> sample,
          demonstrating a custom <a>LinkReshapingTool</a> having Bezier curve links be reshaped using only a single reshape handle at the middle
          rather than two reshape handles, one at each control point.
          The CurvedLinkReshapingTool is defined in the <a href="../extensions/CurvedLinkReshapingTool.js">CurvedLinkReshapingTool.js</a>
          file in the Extensions directory.
        </li>
        <li>
          Added the <a href="../extensions/Dimensioning.html" target="_blank">Dimensioning</a> sample,
          demonstrating a custom <a>Link</a> that shows the distance between two spots on the connected nodes.
          The DimensioningLink class is defined in the <a href="../extensions/DimensioningLink.js">DimensioningLink.js</a>
          file in the Extensions directory.
        </li>
        <li>
          Added the <a href="../extensions/LocalStorageCommandHandler.js" target="_blank">LocalStorageCommandHandler.js</a> file,
          implementing the <a>CommandHandler</a>'s clipboard in HTML <code>localStorage</code>.
        </li>
        <li>
          Added the <a href="../extensions/SnapLinkReshaping.html" target="_blank">Snap Link Reshaping Tool</a> sample,
          demonstrating a custom <a>LinkReshapingTool</a> that snaps link route points to grid points.
          The SnapLinkReshapingTool defined in the <a href="../extensions/SnapLinkReshapingTool.js">SnapLinkReshapingTool.js</a>
          file in the Extensions directory.
        </li>
      </ul>
    </li>
    <li>
      <b>Diagram and Layer:</b>
      <ul>
        <li>
          Added <a>Diagram.addModelChangedListener</a> and <a>Diagram.removeModelChangedListener</a>,
          for declaring <a>Model</a> <a>ChangedEvent</a> listeners on the Diagram.
          The Diagram automatically passes these listeners in calls to <a>Model.removeChangedListener</a> (on the old model)
          and <a>Model.addChangedListener</a> (on the new model) when the <a>Diagram.model</a> is replaced,
          which can be important to avoid retaining references to objects that should be garbage collected.
          A Model Changed event listener can also be established when initializing a Diagram:
          <pre>
        $(go.Diagram, "myDiagram",
          {
            . . .,
            "ModelChanged": function(e) { if (e.isTransactionFinished) saveModel(); },
            . . .
          });
          </pre>
          The listener will be called even if the <a>Diagram.model</a> has been replaced.
        </li>
        <li>
          Added "document" as a new kind of unit argument to <a>Diagram.scroll</a>, called by the <a>CommandHandler</a>
          when handling the <code>Home</code> and <code>End</code> keys.
        </li>
      </ul>
    </li>
    <li>
      <b>Animation:</b>
      <ul>
        <li>
          Collapsing Groups and trees now animate. Specifically, these four commands animate:
          <a>CommandHandler.collapseTree</a>, <a>CommandHandler.expandTree</a>,
          <a>CommandHandler.collapseSubGraph</a>, <a>CommandHandler.expandSubGraph</a>.
        </li>
        <li>
          Scrolling will animate when using <a>CommandHandler.scrollToPart</a>.
        </li>
        <li>
          Added <a>AnimationManager.isInitial</a>, which determines whether an animation is performed on an initial layout.
        </li>
      </ul>
    </li>
    <li>
      <b>Parts:</b>
      <ul>
        <li>
          Added the <a>Part.zOrder</a> property, which defaults to NaN and controls the the Z-ordering position
          of Parts when set to a real number.
        </li>
        <li>
          Documented several methods that have been present in previous versions but had not been documented.
          These methods are now overridable to customize the routing of links:
          <ul>
            <li><a>Link.computePoints</a></li>
            <li><a>Link.computeOtherPoint</a></li>
            <li><a>Link.computeEndSegmentLength</a></li>
            <li><a>Link.computeSpot</a></li>
            <li><a>Link.computeCurve</a></li>
            <li><a>Link.hasCurviness</a></li>
            <li><a>Link.computeCurviness</a></li>
            <li><a>Link.computeSpacing</a></li>
            <li><a>Link.computeThickness</a></li>
            <li><a>Link.makeGeometry</a></li>
          </ul>
          These methods may be called within an override of <a>Link.computePoints</a> in order to build the desired route:
          <ul>
            <li><a>Link.clearPoints</a></li>
            <li><a>Link.addPoint</a></li>
            <li><a>Link.insertPoint</a></li>
            <li><a>Link.removePoint</a></li>
            <li><a>Link.setPoint</a></li>
          </ul>
          These methods may be called in unusual situations:
          <ul>
            <li><a>Link.invalidateRoute</a>, to cause link routes to be recomputed via a call to <a>Link.updateRoute</a></li>
            <li><a>Link.updateRoute</a>, to call <a>Link.computePoints</a> if the link route is invalid</li>
            <li><a>Part.ensureBounds</a>, to measure and arrange the part's visual tree and
                make sure that the width and height are real numbers</li>
          </ul>
          Search the samples for example uses of these methods.
        </li>
        <li>
          <b>Minor change:</b> Multiple links between the same pair of ports now route with a bit more space between them,
          and possibly in a different order than before.
          The routing now accounts for a mid-label object, if present, to reduce their overlap.
          Setting or binding the <a>Link.curviness</a> to a real number results in routes that
          are unaffected by this change or by other links.
        </li>
        <li>
          Extended the functionality of the <a>Node.linkConnected</a> event handler to support access to a new <a>Link</a>'s data.
        </li>
        <li>
          Extended <a>GraphObject.alignmentFocus</a> to permit the value of <a>Spot.None</a> when the object is a <a>Node</a>.
          This may be set on link label nodes to indicate to the node's <a>Node.labeledLink</a> that it should use the node's
          <a>Node.location</a> as the alignment point in the node instead of the normal <a>GraphObject.alignmentFocus</a>.
        </li>
      </ul>
    </li>
    <li>
      <b>GraphObjects and Geometry:</b>
      <ul>
        <li>
          Added <a>GraphObject.shadowVisible</a> to control on a per-GraphObject basis whether or not a shadow will be drawn.
        </li>
        <li>
          Added the "CheckBox" and "CheckBoxButton" predefined Panels.
          The "CheckBox" panel is composed of a "CheckBoxButton" and whatever you want to use as a label.
          The definitions are shown in the <a href="../extensions/Buttons.js">Buttons.js</a> file in the Extensions directory.
          Various configurations of CheckBoxes are shown in the
          <a href="../extensions/CheckBoxes.html" target="_blank">CheckBoxes</a> sample.
        </li>
        <li>
          Added the <a>Panel.findItemPanelForData</a> method,
          to efficiently find the <a>Panel</a> created for an Object in the <a>Panel.itemArray</a>.
        </li>
        <li>
          Fixed the predefined "PanelExpanderButton" to respect the <a>Diagram.isReadOnly</a> property.
        </li>
      </ul>
    </li>
    <li>
      <b>Models:</b>
      <ul>
        <li>
          Added optional support for automatically maintaining unique identifiers on link data.
          Added the <a>GraphLinksModel.linkKeyProperty</a> property, which defaults to the empty string,
          meaning do <i>NOT</i> assign unique ids to links, which is compatible with previous non-behavior.
        </li>
        <li>
          Added the following methods:
          <a>GraphLinksModel.getKeyForLinkData</a>, <a>GraphLinksModel.setKeyForLinkData</a>,
          <a>GraphLinksModel.findLinkDataForKey</a>, <a>GraphLinksModel.makeLinkDataKeyUnique</a>.
          Added the <a>GraphLinksModel.makeUniqueLinkKeyFunction</a> property,
          for customizing the assignment of unique identifiers.
        </li>
        <li>
          Added <a>Model.toIncrementalJson</a> and <a>Model.applyIncrementalJson</a> methods,
          to make it easier to send incremental changes to a database instead of sending a whole model.
          Their use for a <a>GraphLinksModel</a> requires the assignment of unique identifiers to link data,
          so you will need to set <a>GraphLinksModel.linkKeyProperty</a> to the name of a link data property.
        </li>
        <li>
          Added the <a>Model.copy</a> method, which makes an <em>empty</em> copy of a model.
          Model properties are copied but data and Change listeners are not copied.
          Also added the <a>Model.cloneProtected</a> overridable method so that properties that
          are added to custom models can be automatically copied.
        </li>
        <li>
          <a>Model.copyNodeData</a> and <a>GraphLinksModel.copyLinkData</a> now copy property values that are
          of type <a>Point</a>, <a>Size</a>, <a>Rect</a>, <a>Margin</a>, or <a>Spot</a>.
          If you had supplied a custom <a>Model.copyNodeDataFunction</a> or <a>GraphLinksModel.copyLinkDataFunction</a>,
          its behavior is unaffected.
        </li>
        <li>
          Models now read and write property values that are predefined enumerated values,
          such as <a>Link.Orthogonal</a> or <a>TextBlock.WrapDesiredSize</a>.
          The Binding conversion functions <a>Binding.parseEnum</a> and <a>Binding.toString</a>
          are no longer necessary for converting EnumValues to and from strings,
          but they are still suggested in order to reduce the size of the corresponding JSON-formatted text renderings,
          just as using <a>Point.parse</a> and <a>Point.stringify</a> are suggested for binding
          conversions of <a>Point</a> values when you expect to use <a>Model.toJson</a> and <a>Model.fromJson</a>.
        </li>
      </ul>
    </li>
    <li>
      <b>Layouts:</b>
      <ul>
        <li>
          Added the overridable method <a>Layout.cloneProtected</a>,
          to support the automatic copying of properties that are added in custom <a>Layout</a> classes.
        </li>
        <li>
          When there are multiple roots, <a>TreeLayout</a> now arranges the trees respecting
          <a>TreeLayout.sorting</a> and <a>TreeLayout.comparer</a>.
        </li>
        <li>
          Improved <a>LayeredDigraphLayout</a> to better support routing of links from/to the sides of nodes.
          Just set <a>LayeredDigraphLayout.setsPortSpots</a> to false and set the nodes' <a>GraphObject.fromSpot</a>
          to be <code>Spot.RightSide</code> and their <a>GraphObject.toSpot</a> to be <code>Spot.LeftSide</code>
          (assuming the <a>LayeredDigraphLayout.direction</a> is zero).
          If you do not want the "backwards" cycle-producing links to be routed "around" nodes,
          set <a>LayeredDigraphLayout.setsPortSpots</a> to false and set both the <a>GraphObject.fromSpot</a>
          and <a>GraphObject.toSpot</a> on the nodes to be <code>Spot.TopBottomSides</code>
          (assuming the <a>LayeredDigraphLayout.direction</a> is 90).
        </li>
      </ul>
    </li>
    <li>
      <b>Tools and Commands:</b>
      <ul>
        <li>
          Added the ScrollToPart command, <a>CommandHandler.scrollToPart</a> and <a>CommandHandler.canScrollToPart</a>.
          This can be invoked with the Space key to scroll the diagram to show the first Part in the highlighteds or selection collection.
          Call it repeatedly to cycle through the collection, scrolling to each in turn.
          <a>CommandHandler.scrollToPart</a> can also be called with any Part in the Diagram in order to scroll it into view.
        </li>
        <li>
          Added the <a>CommandHandler.deletesConnectedLinks</a> property, to control whether deleting a <a>Node</a>
          automatically deletes all <a>Link</a>s that are connected with that Node.
          The default value is true.
        </li>
        <li>
          Added <a>ToolManager.toolTipDuration</a>, to control how long to show a tool tip <a>Adornment</a> for
          a GraphObject or the Diagram after being motionless.
          <b style="color:red;">Change:</b> ToolTips now hide themselves by default after 5000 milliseconds,
          whereas they had remained visible forever as long as the mouse remained stationary.
        </li>
        <li>
          Tool Tips are now shown on touch devices when the user clicks on an object with a <a>GraphObject.toolTip</a>
          or in the diagram background when <a>Diagram.toolTip</a> is an Adornment.
        </li>
        <li>
          Fixed the <a>DraggingTool</a> to provide an empty <a>Set</a> as the <a>DiagramEvent.subject</a>
          when an external drag-and-drop is cancelled during a drop.
        </li>
        <li>
          Fixed <a>DraggingTool.canStart</a> to return false for diagrams that are <a>Diagram.isReadOnly</a>
          unless <a>Diagram.allowDragOut</a> is true.  This prevents the tool from running within read-only diagrams,
          other than in <a>Palette</a>s and other diagrams where users will be dragging out of the diagram.
        </li>
        <li>
          When <a>ContextMenuTool</a> handles a second click that is also a context click,
          it may show another context menu if it is over another valid target.
        </li>
        <li>
          The default values of <a>ToolManager.hoverDelay</a> and <a>ToolManager.holdDelay</a> have both been reduced from 1000 to 850 milliseconds.
        </li>
        <li>
          <a>Tool.standardWaitAfter</a> now has a second, optional argument. When it exists it is the <a>InputEvent</a> that caused standardWaitAfter.
          This event is passed on to <a>Tool.doWaitAfter</a>. The override, <a>ToolManager.doWaitAfter</a>, is now what handles long taps on mobile devices and emits a simulated right-click.
          Long-taps simulating a right click has been part of GoJS for some time, but can now be overridden.
        </li>
      </ul>
    </li>
  </ul>

  <hr />

  <h4>Changes for 1.5.23</h4>
  <ul>
    <li>
      Fixed changing <a>GraphObject.segmentOrientation</a> of a Link label back to <a>Link.None</a>
      not resetting the <a>GraphObject.angle</a> back to zero.
    </li>
    <li>
      Fixed <a>Tool.findToolHandleAt</a> to support tool handles that are <a>Panel</a>s, not only simple <a>Shape</a>s.
      All tool handles are elements of <a>Adornment</a>s.
    </li>
    <li>
      Fixed <a>LinkReshapingTool</a> not to cause an exception if for some reason it is unable
      to <a>Tool.findToolHandleAt</a> the new handle created by dragging a resegmenting tool handle.
    </li>
    <li>
      DOM Input Events to the <a>TextEditingTool</a>'s default tool now check if the TextEditingTool is still running.
    </li>
  </ul>

  <h4>Changes for 1.5.22</h4>
  <ul>
    <li>
      Fixed a zoom bug introduced in 1.5.21.
    </li>
  </ul>

  <h4>Changes for 1.5.21</h4>
  <ul>
    <li>
      Fixed changing <a>Diagram.scale</a> causing an error for some values of <a>Diagram.contentAlignment</a>.
    </li>
    <li>
      Improved the <a>TextEditingTool</a> to scroll the edited <a>TextBlock</a> into view, not the whole <a>Part</a> holding the TextBlock.
    </li>
    <li>
      Fixed <a>Model.setKeyForNodeData</a> to update link data references (regression) in <a>GraphLinksModel</a>s.
    </li>
    <li>
      Fixed an aspect-ratio issue when using <a>Diagram.makeSVG</a> with <a>Picture</a>s.
      Fixed a related issue when using <a>Picture.sourcerect</a> with <a>Diagram.makeSVG</a>.
    </li>
  </ul>

  <h4>Changes for 1.5.20</h4>
  <ul>
    <li>
      Fixed <a>TextBlock.OverflowEllipsis</a> sometimes not displaying ellipses when a height was set on the TextBlock.
    </li>
    <li>
      Fixed routing of links with <a>Link.adjusting</a> being <a>Link.Scale</a> or <a>Link.Stretch</a> sometimes resulting in straight lines.
    </li>
    <li>
      Fixed <a>TreeLayout</a> not respecting <a>Part.isLayoutPositioned</a> set to false on Comment Nodes (Nodes with the category "Comment").
    </li>
    <li>
      Text rendering improvements.
    </li>
  </ul>

  <h4>Changes for 1.5.19</h4>
  <ul>
    <li>
      Fixed error when operating in PhantomJS environment.
    </li>
    <li>
      Fixed handling of control characters in text strings by <a>Model.toJson</a>.
    </li>
  </ul>

  <h4>Changes for 1.5.18</h4>
  <ul>
    <li>
      Fixed <a>Diagram.alignDocument</a> when scrolling the current screen out of view.
    </li>
    <li>
      Fixed round-off errors in <a>GridLayout</a> positioning of nodes when <a>GridLayout.alignment</a> is <a>GridLayout.Location</a>.
    </li>
  </ul>

  <h4>Changes for 1.5.16 and 1.5.17</h4>
  <ul>
    <li>
      In CommonJS environments, set <code>module.exports</code> as well as <code>window.module.exports</code>, in case they are different objects.
    </li>
  </ul>

  <h4>Changes for 1.5.15</h4>
  <ul>
    <li>
      Fixed zero-sized Arc <a>PathSegment</a>s.
    </li>
    <li>
      Ensured Groups with Placeholders always recalculate their bounds when collapsed or expanded.
    </li>
  </ul>

  <h4>Changes for 1.5.14</h4>
  <ul>
    <li>
      Fixed <a>Picture.element</a> property setter to allow null.
    </li>
  </ul>

  <h4>Changes for 1.5.13</h4>
  <ul>
    <li>
      Fixed <a>GraphObject.isActionable</a> items being erroneously clickable through other non-actionable Parts.
    </li>
    <li>
      <a>Diagram.makeSvg</a> now uses globally unique identifiers for its elements so that SVG from makeSvg can be used multiple times in the same page.
    </li>
    <li>
      Fixed <a>DraggingTool</a> movement of a <a>Node</a> with a half-connected <a>Link</a> when <a>DraggingTool.isGridSnapEnabled</a> is true.
    </li>
  </ul>

  <h4>Changes for 1.5.12</h4>
  <ul>
    <li>
      The <a>TextEditingTool.selectsTextOnActivate</a> now selects text on iOS Safari.
    </li>
    <li>
      Fixed the <a>Part.containingGroup</a> of reflexive member <a>Link</a>s.
    </li>
    <li>
      Fixed the loading of <a>Link</a> routes via a <a>Binding</a> on <a>Link.points</a> when the Links were connected with a <a>Group</a>.
    </li>
  </ul>

  <h4>Changes for 1.5.11</h4>
  <ul>
    <li>
      Fixes for location data binding when animation is enabled.
    </li>
    <li>
      Provisional fix for OSX scrollbars when invisible by default. Functionality may change in future releases.
    </li>
    <li>
      Fixed <a>ResizingTool</a> when resizing a Group with reflexive links.
    </li>
    <li>
      The <a>TextEditingTool</a> more accurately predicts the editable area for text.
    </li>
  </ul>

  <h4>Changes for 1.5.10</h4>
  <ul>
    <li>
      Fixed the way <a>PathSegment.Arc</a>s are calculated and approximated.
      This will change computed bounds and hit-testing, which now correctly reflect drawn arcs,
      but the bounds changes may cause incompatibilities in apps that depend on the old approximations.
    </li>
  </ul>

  <h4>Changes for 1.5.9</h4>
  <ul>
    <li>
      Fixed an undo/redo bug with <a>Part.location</a> and <a>GraphObject.position</a>.
    </li>
    <li>
      Fixed Picture optimizations to work with <a>Picture.sourceRect</a>
    </li>
    <li>
      Fixed the <a>TextEditingTool</a> inserting newlines into TextBlocks with <a>TextBlock.isMultiLine</a> set to false, when a validation function was present.
    </li>
  </ul>

  <h4>Changes for 1.5.8</h4>
  <ul>
    <li>
      Improved the TypeScript definition file, <a href="../release/gojs.d.ts">goJS.d.ts</a>,
      fixing some typos, changing some <b>Object</b> types to be <b>any</b> for easier usage.
    </li>
    <li>
      Fixed <a>DraggingTool</a> when <a>DraggingTool.dragsLink</a> is true and when dragging a <a>Link</a>
      to respect <a>LinkingBaseTool.isValidLink</a> on the <a>RelinkingTool</a>.
    </li>
    <li>
      Fixed <a>TextBlock</a> rendering in some ellipses cases.
    </li>
  </ul>

  <h4>Changes for 1.5.7</h4>
  <ul>
    <li>
      Added an Introduction page just for <a href="../intro/changedEvents.html">Changed Events</a>.
    </li>
    <li>
      Fixed <a>Iterator.next</a> to continue returning false once it has already returned false.
    </li>
    <li>
      Overviews now respect <a>Layer.opacity</a>
    </li>
    <li>
      Successive calls to <a>CommandHandler.editTextBlock</a> now correctly switch the TextBlock.
    </li>
  </ul>

  <h4>Changes for 1.5.6</h4>
  <ul>
    <li>
      Changed default behavior of <a>LayoutNetwork.commitLayout</a> to call <a>LayoutVertex.commit</a> on each vertex in the layout.
      Previous behavior was to do nothing, but all predefined layouts that used <a>LayoutNetwork</a> already had overrides of this method.
      The new behavior is convenient for the implementation of simple custom <a>Layout</a>s that use networks.
      The new behavior does not affect custom layouts that do not use networks.
    </li>
    <li>
      Fixed <a>GraphObject.getDocumentAngle</a> sometimes returning 0 when it should return 180.
    </li>
    <li>
      Fixed text rendering when both <a>TextBlock.isUnderline</a> and <a>TextBlock.isStrikethrough</a> are true with all values of <a>TextBlock.textAlign</a>.
    </li>
    <li>
      Fixed export of <a>LinkReshapingTool.setReshapingBehavior</a> and <a>LinkReshapingTool.getReshapingBehavior</a>.
    </li>
    <li>
      Fixed <a>Model.fromJson</a> reading solid color <a>Brush</a>es, when they are not just strings.
    </li>
  </ul>

  <h4>Changes for 1.5.5</h4>
  <ul>
    <li>
      Added the <a href="../extensions/CheckBoxes.html" target="_blank">CheckBoxes</a> sample,
      demonstrating how to define a "check box" and how to customize them.
    </li>
    <li>
      Added the static method <a>GraphObject.takeBuilderArgument</a>, for use by <a>GraphObject.defineBuilder</a> functions
      for more easily retrieving builder arguments from the arguments passed to <a>GraphObject.make</a>.
    </li>
    <li>
      Added the definitions of the predefined arrowheads to the <a href="../extensions/Arrowheads.js" target="_blank">Arrowheads.js</a> file in the Extensions directory.
      The predefined arrowheads are still predefined, so you will not need to load this file in order to have those definitions.
      This file provides information about how each arrowhead is defined, so that you can customize them or copy-and-adapt them.
    </li>
    <li>
      Fixed <a>TextBlock.isStrikethrough</a> to work with all values of <a>TextBlock.textAlign</a>.
    </li>
    <li>
      Adding a Part is now undoable if its layer has changed without notifying the undo manager, such as with a "layerName":"isSelected" binding.
    </li>
    <li>
      Fixed <a>Geometry.scale</a> and <a>Geometry.rotate</a> of <a>PathSegment</a>s that are arcs.
    </li>
  </ul>

  <h4>Changes for 1.5.4</h4>
  <ul>
    <li>
      Added the <a href="../extensions/RealtimeDragSelecting.html" target="_blank">Realtime Drag Selecting Tool</a> sample,
      with the RealtimeDragSelectingTool defined in the <a href="../extensions/RealtimeDragSelectingTool.js">RealtimeDragSelectingTool.js</a>
      in the Extensions directory.
    </li>
    <li>
      Added the <a href="../samples/hoverButtons.html" target="_blank">Hover Buttons</a> sample,
      demonstrating how an <a>Adornment</a> can be used to show buttons for a node when the mouse is briefly motionless over the node.
    </li>
    <li>
      Added the <a href="../extensions/Spiral.html" target="_blank">Spiral Layout</a> sample,
      with the SpiralLayout defined in the <a href="../extensions/SpiralLayout.js">SpiralLayout.js</a> file in the Extensions directory.
    </li>
    <li>
      Fixed <a>ContextMenuTool</a> so that any click events (<a>Tool.standardMouseClick</a>) in the <a>ContextMenuTool.currentContextMenu</a>occur on mouse-up, not mouse-down.
    </li>
    <li>
      Reworked <a>Picture</a> code so that <a>Picture.errorfunction</a> is now called on every Picture instance in every Diagram that references an image which has had an error.
    </li>
  </ul>

  <h4>Changes for 1.5.3</h4>
  <ul>
    <li>
      The transaction name argument to <a>UndoManager.commitTransaction</a>  (or <a>Model.commitTransaction</a> or <a>Diagram.commitTransaction</a>) is now optional,
      and defaults to the name given at the time of the call to <a>UndoManager.startTransaction</a>.
    </li>
    <li>The Backspace (Windows) or Delete (Mac) key now invokes <a>CommandHandler.deleteSelection</a> just like the Delete (Windows) or Delete-Forward (Mac) key already does.</li>
  </ul>

  <h4>Changes for 1.5.2</h4>
  <ul>
    <li>Updated the TypeScript definition file, <a href="../release/goJS.d.ts">goJS.d.ts</a>, to TypeScript version 1.4.</li>
    <li>Fixed <a>Brush</a> constructor in Debug mode improperly raising error about string argument not being a valid color string.</li>
    <li>Fixed a cross-origin error when using <a>Diagram.makeImageData</a> with SVG images in Internet Explorer.</li>
  </ul>

  <h4>Changes for 1.5.1</h4>
  <ul>
    <li>
      Added the <a href="../samples/kanban.html" target="_blank">Kanban Board</a> sample,
      derived from the <a href="../samples/swimLanesVertical.html" target="_blank">Swim Lanes (vertical)</a> sample.
    </li>
    <li>Fixed scrollbar clicking on touch-enabled devices in Chrome on Windows.</li>
    <li>More graceful handling of Picture image errors.</li>
    <li>Fixed bugs with undo of changed state inside Parts whose <a>Part.category</a> was later changed.</li>
    <li>Stopped touch events from always calling preventDefault (touch events were impossible to bubble).</li>
  </ul>

  <h4>Changes for 1.5 since 1.4.*</h4>
  <ul>
    <li>
      <b>Samples and documentation:</b>
      <ul>
        <li>
          Added the <a href="../samples/addRemoveColumns.html" target="_blank">Add or Remove Columns</a> sample,
          demonstrating how columns and rows may be added to or removed from a Table Panel.
        </li>
        <li>
          Added the <a href="../samples/barCharts.html" target="_blank">Bar Charts</a> sample,
          demonstrating simple bar charts in each node.
        </li>
        <li>
          Added the <a href="../samples/candlestickCharts.html" target="_blank">Candlestick or Range Charts</a> sample,
          demonstrating a simple candlestick chart showing ranges of values in each node.
        </li>
        <li>
          Added the <a href="../samples/curviness.html" target="_blank">Link Curviness</a> sample,
          demonstrating how <a>Link.curviness</a> may be set or bound to bend links by different amounts.
        </li>
        <li>
          Added the <a href="../samples/dataFlow.html" target="_blank">Data Flow</a> and
          <a href="../samples/dataFlowVertical.html" target="_blank">Data Flow (Vertical)</a> samples,
          demonstrating additional styles of having labeled ports on nodes.
        </li>
        <li>
          Added the <a href="../samples/distances.html" target="_blank">Distances and Paths</a> sample,
          demonstrating finding a shortest path between two nodes and also demonstrating finding all paths between two nodes.
        </li>
        <li>
          Added the <a href="../samples/draggablePorts.html" target="_blank">Draggable Ports</a> sample,
          demonstrating how one could use Nodes as ports within a Group to allow users to select, move, copy, and delete ports.
        </li>
        <li>
          Added the <a href="../samples/interactiveForce.html" target="_blank">Interactive Force Directed</a> sample,
          demonstrating a <a>ForceDirectedLayout</a> that operates continuously while the user is dragging the selection.
        </li>
        <li>
          Added the <a href="../samples/magnifier.html" target="_blank">Magnifying Glass</a> sample,
          demonstrating how to use an <a>Overview</a> for magnifying an area of a Diagram, with a larger <a>Diagram.scale</a>
          than the observed diagram.
        </li>
        <li>
          Added the <a href="../samples/multiNodePathLinks.html" target="_blank">Multi-Node Path Links</a> sample,
          demonstrating a custom Link routing that results in a path that goes through various other nodes.
        </li>
        <li>
          Added the <a href="../samples/multiArrow.html" target="_blank">Multiple Arrowheads</a> sample,
          demonstrating how a custom orthogonal Link can draw multiple arrowheads, one at the end of each segment.
        </li>
        <li>
          Added the <a href="../samples/pieCharts.html" target="_blank">Pie Charts</a> sample,
          demonstrating simple pie charts in each node.
        </li>
        <li>
          Added the <a href="../samples/regroupingTreeView.html" target="_blank">Regrouping Tree View</a> sample,
          demonstrating one way of synchronizing a <a>TreeModel</a> in one Diagram and a <a>GraphLinksModel</a> in another Diagram,
          where both models are actually sharing the same data objects.
        </li>
        <li>
          Added the <a href="../samples/sankey.html" target="_blank">Sankey Diagram</a> sample,
          making use of the new <a>Node.portSpreading</a> property and variable width links.
        </li>
        <li>
          Added the <a href="../samples/scrollModes.html" target="_blank">Scroll Modes</a> sample,
          demonstrating how "Infinite Scrolling" can work and how the <a>Diagram.positionComputation</a>
          and <a>Diagram.scaleComputation</a> functional properties can be used.
        </li>
        <li>
          Added the <a href="../samples/selectableFields.html" target="_blank">Selectable Fields</a> sample,
          demonstrating how the fields in the Records sample may be selected by the user.
        </li>
        <li>
          Added the <a href="../samples/selectablePorts.html" target="_blank">Selectable Ports</a> sample,
          demonstrating how ports can be selected and deleted from nodes.
        </li>
        <li>
          Added the <a href="../samples/sharedStates.html" target="_blank">Shared States</a> sample,
          demonstrating one way of pretending that a node can be a member of multiple groups simultaneously.
          This does not make use of <a>Group</a>s, but makes use of custom layout and dragging to accomplish the effect.
        </li>
        <li>
          Added the <a href="../samples/sparklineGraphs.html" target="_blank">Sparkline Graphs</a> sample,
          demonstrating simple sparkline charts within nodes.
        </li>
        <li>
          Added the <a href="../samples/spreadsheet.html" target="_blank">Spreadsheet</a> sample,
          demonstrating many nested Table Panels forming something like a spreadsheet grid.
        </li>
        <li>
          Split the <a href="../samples/swimLanes.html" target="_blank">Swim Lanes</a> samples into two: horizontal
          and vertical, <a href="../samples/swimLanesVertical.html" target="_blank">Swim Lanes (vertical)</a>.
          Each lane (implemented by a <a>Group</a>) is collapsible and resizable and movable.
          Lanes belong to "Pool" Groups. When they are moved they are re-ordered by the custom PoolLayout within the pool.
          Layout within a "Lane" Group no longer happens automatically -- it only happens by calling <code>relayoutLanes()</code>.
          This allows the sample to remember where users have dragged the nodes, including saving and loading to JSON text.
        </li>
        <li>
          Added the <a href="../samples/timeline.html" target="_blank">Timeline</a> sample,
          demonstrating a simple graduated timeline with events positioned along it by a custom layout.
        </li>
        <li>
          Added the <a href="../samples/twoDiagrams.html" target="_blank">Two Diagrams</a> sample,
          demonstrating how two <a>Diagram</a>s, each with its own <a>Model</a>, can share a single <a>UndoManager</a>,
          to facilitate dragging between the diagrams while supporting undo/redo.
        </li>
        <li>
          Added the <a href="../samples/umlClass.html" target="_blank">UML Class Diagram</a> sample,
          showing an implementation of UML class nodes.
        </li>
        <li>
          Added the <a href="../samples/visualTreeGrouping.html" target="_blank">Visual Tree Using Nested Groups</a> sample,
          showing the visual tree of a Diagram using nested Groups rather than Nodes and Links.
        </li>
        <li>
          Added the <a href="../samples/scrollModes.html" target="_blank">Scroll Modes</a> sample,
          showing new properties for controlling scrolling and zooming.
        </li>
        <br />
        <li>
          Added the <a href="../extensions/BalloonLink.js">Balloon Link</a> class in the Extensions directory.
          The Balloon Link is used by the updated <a href="../samples/comments.html">Comments</a> sample.
        </li>
        <li>
          Added the <a href="../extensions/ColumnResizing.html" target="_blank">Column and Row Resizing</a> sample,
          with the ColumnResizingTool and RowResizingTool defined in the
          <a href="../extensions/ColumnResizingTool.js">ColumnResizingTool.js</a> and
          <a href="../extensions/RowResizingTool.js">RowResizingTool.js</a> files in the Extensions directory.
        </li>
        <li>
          Added the <a href="../extensions/DragCreating.html" target="_blank">Drag Creating Tool</a> sample,
          with the DragCreatingTool defined in the <a href="../extensions/DragCreatingTool.js">DragCreatingTool.js</a>
          in the Extensions directory.
        </li>
        <li>
          Added overrides of <a>CommandHandler.copyToClipboard</a> and <a>CommandHandler.pasteFromClipboard</a>
          to the DrawCommandHandler in the Extensions directory.
          Added a DrawCommandHandler.pasteOffset property to control the offset distance.
        </li>
        <li>
          Added the <a href="../extensions/Inspector.html" target="_blank">Inspector</a> sample,
          demonstrating a general HTML component for showing and editing various property values.
          The Inspector code is defined in the
          <a href="../extensions/Inspector.js">Inspector.js</a> file in the Extensions directory.
        </li>
        <li>
          Added the <a href="../extensions/Parallel.html" target="_blank">Parallel Layout</a> sample,
          with the ParallelLayout, derived from <a>TreeLayout</a>, defined in the
          <a href="../extensions/ParallelLayout.js">ParallelLayout.js</a> file in the Extensions directory.
        </li>
        <li>
          Added the <a href="../extensions/ScrollingTable.html" target="_blank">Scrolling Table</a> sample,
          with the "ScrollingTable" <a>Panel</a> defined in <a href="../extensions/ScrollingTable.js">ScrollingTable.js</a>
          in the Extensions directory.
          That also contains the definition of the "AutoRepeatButton" Panel, two instances of which are used by each "ScrollingTable".
        </li>
        <li>
          Added the <a href="../extensions/Table.html" target="_blank">Table Layout</a> sample,
          with the custom Layout defined in <a href="../extensions/TableLayout.js">TableLayout.js</a> in the Extensions directory.
        </li>
        <li>
          Added the <a href="../extensions/TreeMap.html" target="_blank">Tree Map Layout</a> sample,
          with the layout defined in <a href="TreeMapLayout.js">TreeMapLayout.js</a> in the Extensions directory.
        </li>
        <br />
        <li>
          Moved the definitions of the predefined Buttons from the <a href="../intro/buttons.html">Introduction</a>
          to the <a href="../extensions/Buttons.js" target="_blank">Buttons.js</a> file in the Extensions directory.
          The predefined buttons are still predefined, so you will not need to load this file in order to have those definitions.
          This file provides information about how each button is defined, so that you can customize them or copy-and-adapt them.
        </li>
      </ul>
    </li>
    <li>
      <b>Diagram and Layer:</b>
      <ul>
        <li>
          Added <a>Diagram.findNodesByExample</a> and <a>Diagram.findLinksByExample</a>, two methods for finding
          a collection of Nodes or Links that are bound to data whose properties match the argument object's properties.
          This is used by the updated <a href="../samples/orgChartStatic.html">Org Chart (static)</a> sample,
          to demonstrate search capabilities.
        </li>
        <br />
        <li>
          Added <a>Diagram.scrollMode</a> property, an enum property that can be set to <a>Diagram.DocumentScroll</a>
          (the default) or <a>Diagram.InfiniteScroll</a>, to allow for endless scrolling in all directions.
          This is demonstrated by the new <a href="../samples/scrollModes.html" target="_blank">Scroll Modes</a> sample.
        </li>
        <li>
          Added <a>Diagram.scrollMargin</a> property, allowing the declaration of additional scrollable area
          around the <a>Diagram.documentBounds</a>.
        </li>
        <li>
          Added <a>Diagram.positionComputation</a> property, a function that determines the <a>Diagram.position</a>
          that a Diagram can be scrolled or moved to.
        </li>
        <li>
          Added <a>Diagram.scaleComputation</a> property, a function that determines the <a>Diagram.scale</a>
          that a Diagram can be zoomed to.
        </li>
        <br />
        <li>
          Added <a>Diagram.updateAllRelationshipsFromData</a>, to update the relationships between nodes in the diagram
          when there have been changes to properties in the model data that hold node references (keys) without
          having gone through model methods.
          Like <a>Diagram.updateAllTargetBindings</a>, this is only needed for environments
          where one cannot control changes to model data.
        </li>
        <li>
          Added <a>Diagram.setProperties</a>, to set a bunch of properties in exactly the same manner that
          <a>GraphObject.make</a> does when constructing a Diagram.
        </li>
        <li>
          Removed support for ancient versions of Firefox (3.6), Opera (10, 11), and Safari (5.0).
        </li>
      </ul>
    </li>
    <li>
      <b>Parts:</b>
      <ul>
        <li>
          <b style="color:red;">Potentially Incompatible:</b> Fixed a <a>Link</a> to be a member of a <a>Group</a>
          if it connects a member node of the group with the group itself.
          Such links now connect with the group from inside rather than from the outside.
          <b>GoJS</b> had been inconsistent with such membership and its implications.
          The behavior is demonstrated by the <a href="../samples/navigation.html">Navigation</a> sample.
        </li>
        <li>
          Extended the <a>Link.points</a> property setter to accept not only a <a>List</a> of <a>Point</a>s and
          an Array of an even number of numbers, but also an Array of Objects each of which has 'x' and 'y' properties
          that are numbers.
        </li>
        <br />
        <li>
          Added <a>Node.findTreeLevel</a> method, to determine a Node's depth in a tree.
          Root nodes (i.e. no <a>Node.findTreeParentLink</a>) have a level of zero.
        </li>
        <li>
          Added <a>Node.findCommonTreeParent</a> method, to find a Node that is the closest ancestor to two Nodes,
          which may include either of the two Nodes themselves.
        </li>
        <li>
          Added <a>Node.portSpreading</a> property, to control how link points are computed when "Side" spots are specified.
          See the <a href="../samples/sankey.html">Sankey Diagram</a> sample for an example using <a>Node.SpreadingPacked</a>
          instead of the default value of <a>Node.SpreadingEvenly</a>.  Use <a>Node.SpreadingNone</a> with a multiple "Side" spot,
          such as <a>Spot.LeftRightSides</a>, in order to have the connection point always be at the middle of either the
          left side or the right side, whichever is closer.
        </li>
        <br />
        <li>
          Added <a>Group.handlesDragDropForMembers</a> property, which avoids having to define <a>GraphObject.mouseDragEnter</a>,
          <a>GraphObject.mouseDragEnter</a>, or <a>GraphObject.mouseDrop</a> event handlers on each Node or Link that is a
          member of a Group in order to delegate the drag-and-drop events to the containing Group.
          For compatibility the default value is false.  Adding this property has significantly simplified several samples:
          <a href="../samples/planogram.html">Planogram</a>, <a href="../samples/regrouping.html">Regrouping</a>, and
          <a href="../samples/swimLanes.html">Swim Lanes</a>.
        </li>
        <br />
        <li>
          Added <a>Part.findSubGraphLevel</a> method, to determine a Part's nested depth in the hierarchy of containing <a>Group</a>s.
          A Part that is <a>Part.isTopLevel</a> has a level of zero.
          See the <a href="../samples/regroupingScaled.html">Regrouping Scaled</a> sample for an example usage.
        </li>
        <li>
          Added <a>Part.updateRelationshipsFromData</a> method, to update the relationships between nodes in the diagram
          when there have been changes to properties in the model data that hold node references (keys)
          without having gone through model methods.
          Like <a>Part.updateTargetBindings</a>, this is only needed for environments where one cannot control changes to model data.
        </li>
      </ul>
    </li>
    <li>
      <b>GraphObjects and Geometry:</b>
      <ul>
        <li>
          Changed the default value of <a>Shape.parameter1</a> and <a>Shape.parameter2</a> from 0 to NaN.
          This allows the use of zero as a legimate value for the range of numbers handled by any particular figure.
          However, since <a>Shape.defineFigureGenerator</a> is new for version 1.5,
          this change is unlikely to be an issue for any existing code.
        </li>
        <li>
          The predefined Buttons are styled differently, to be flatter and more rectangular.
          You can customize them by setting their properties and their nested properties.
          See their new definitions in the <a href="../extensions/Buttons.js">Buttons.js</a> file
          in the Extensions directory.
        </li>
        <br />
        <li>
          Added the "PanelExpanderButton" predefined Panel,
          used by the <a href="../samples/IVRtree.html">IVR Tree</a> and
          <a href="../samples/entityRelationship.html">Entity Relationship</a> samples.
          The definition is shown in the <a href="../extensions/Buttons.js">Buttons.js</a> file
          in the Extensions directory.
        </li>
        <br />
        <li>
          Added <a>GraphObject.setProperties</a>, to set a bunch of properties in exactly the same manner that
          <a>GraphObject.make</a> does when constructing a GraphObject.
        </li>
        <li>
          Added <a>GraphObject.defineBuilder</a> static function for defining new names that can
          be used by <a>GraphObject.make</a>.
          This is used in the <a href="../extensions/ScrollingTable.html">Scrolling Table</a> sample
          for the "AutoRepeatButton" and the "ScrollingTable".
        </li>
        <br />
        <li>Added <a>Shape.defineFigureGenerator</a> static function for defining new figure names for <a>Shape.figure</a>.</li>
        <li>
          Added <a>Shape.getFigureGenerators</a> static function for getting a <a>Map</a> of figure names.
          This is used in the <a href="../samples/shapes.html">Shapes</a> sample.
        </li>
        <br />
        <li>
          Added <a>Geometry.defaultStretch</a> property, which can be used by figure generators to control the aspect ratio of
          the <a>Shape</a> that uses that figure.
        </li>
        <li>
          Added <a>Geometry.add</a> and <a>PathFigure.add</a> methods, to make it easier to construct Path Geometries in code,
          which is much more efficient than using <a>GraphObject.make</a>.
        </li>
        <li>
          Added "BarH" and "BarV" figures, used by Grid <a>Panel</a>s to fill rectangular areas rather than just draw
          horizontal or vertical lines.
          See <a href="../intro/grids.html">Grid Patterns</a> for example usage.
        </li>
        <br />
        <li>
          Added <a>Shape.defineArrowheadGeometry</a> static function for defining new arrowhead names for <a>Shape.toArrow</a>
          and <a>Shape.fromArrow</a>.
        </li>
        <li>
          Added <a>Shape.getArrowheadGeometries</a> static function for getting a <a>Map</a> of arrowhead names.
          This is used in the <a href="../samples/arrowheads.html">Arrowheads</a> sample.
        </li>
        <br />
        <li>Added <a>Picture.sourceCrossOrigin</a> property, for customizing cross-origin image requests.</li>
        <br />
        <li>Added <a>TextBlock.maxLines</a>, to limit the number of lines of text shown in a TextBlock.</li>
        <li>
          The <a>TextBlock.font</a> property setter now raises an error in <code>Debug</code> mode if the new value
          is not a valid font.
        </li>
        <br />
        <li>
          Added <a>Panel.findMainElement</a> method, to get the first child element with <a>GraphObject.isPanelMain</a> true,
          or if there is no such element, just the first element.
        </li>
        <li>
          Extended support for a first <a>Panel</a> element that is kept when <a>Panel.itemArray</a> gets a new Array value,
          beyond just Spot and Auto and Link Panels,
          to Table Panels whose first element is a "TableRow" or "TableColumn" Panel with <a>Panel.isMainPanel</a> true.
          This makes implementing literal table headers possible without having the header information
          in the item Array as the first item.
          This is now demonstrated in <a href="../intro/itemArrays.html">Item Arrays</a>,
          as well as the previously supported case where the header information was in the item array,
          <a href="../intro/templateMaps.html">Template Maps</a>.
        </li>
        <li>
          In templates, Auto or Spot Panels with zero or only one element in them will result in a warning message.
          Their operation with zero or one element is otherwise unchanged.  However, Auto and Spot Panels expect
          there to be a "main" element, so having this warning may help detect places where editing mistakes may
          have resulted in unexpected visual trees.
        </li>
        <li>
          Fixed removing the wrong element in a Spot or Auto <a>Panel</a> that had a <a>Panel.itemArray</a> when
          calling <a>Model.removeArrayItem</a>.
        </li>
      </ul>
    </li>
    <li>
      <b>Models:</b>
      <ul>
        <li>
          Added <a>Model.copiesArrays</a> and <a>Model.copiesArrayObjects</a> properties,
          so that often one does not need to implement a custom <a>Model.copyNodeDataFunction</a>.
          The samples have been simplified by using these two properties and removing all of the functions
          that were used to copy node data without sharing Arrays or array item objects.
        </li>
        <li>Improved data binding target resolution when there are duplicate object names.</li>
      </ul>
    </li>
    <li>
      <b>Layouts:</b>
      <ul>
        <li>
          Added an optional predicate argument to <a>LayoutNetwork.addParts</a>,
          for easier filtering of which nodes or links to include in the network as vertexes or edges.
        </li>
        <li>
          Added <a>ForceDirectedLayout.randomNumberGenerator</a>, which can be set to null each time you want to use and reset
          its own internal random number generator instead of calling Math.random().
          This is useful for repeatable results given identical initial circumstances.
        </li>
        <li>
          Fixed bug in <a>LayeredDigraphLayout</a> when dealing with nodes of multiple ports that had not yet gotten real positions.
        </li>
      </ul>
    </li>
    <li>
      <b>Tools and Commands:</b>
      <ul>
        <li>
          Added <a>LinkingBaseTool.isValidCycle</a>, exposing a predicate called by <a>LinkingBaseTool.isValidLink</a>
          to check the validity of a proposed link according to the value of <a>Diagram.validCycle</a>.
        </li>
        <li>
          Added <a>CommandHandler.copiesConnectedLinks</a> property,
          to allow control whether Links connected with selected Nodes are copied by <a>CommandHandler.copySelection</a>,
          much as <a>DraggingTool.copiesEffectiveCollection</a> does for the <a>DraggingTool</a>.
        </li>
        <li>Improved external drag-and-drop between <a>Diagram</a>s to give focus to the target diagram upon a successful drop.</li>
        <li>
          Improved <a>ToolManager.positionToolTip</a> and <a>ContextMenuTool.positionContextMenu</a> to allow <a>Adornment</a>s
          (tooltips and context menus)
          to position themselves when they contain a <a>Placeholder</a>.
        </li>
      </ul>
    </li>
    <li>
      <b>Collections:</b>
      <ul>
        <li>Added <a>List.last</a>, <a>List.push</a>, and <a>List.pop</a> methods, for convenience in treating a List as a stack.</li>
      </ul>
    </li>
  </ul>

  <hr />

  <h4>Changes for 1.4.28</h4>
  <ul>
    <li>Fixed calculation of "Side" port positions when there are multiple ports on a node.</li>
    <li>More permissive Picture drawing: Will still draw if an image has an error but is complete at a later time (such as from a timeout).</li>
  </ul>

  <h4>Changes for 1.4.27</h4>
  <ul>
    <li>Fixed TextBlock ellipses when using the undocumented property TextBlock.maxLines</li>
  </ul>

  <h4>Changes for 1.4.26</h4>
  <ul>
    <li>Fixed some clipping scenarios with <a>Diagram.makeSvg</a>.</li>
    <li>Improved shadow rendering in <a>Diagram.makeSvg</a>.</li>
    <li><a>Diagram.makeSvg</a> now includes temporary parts in its bounds computation when <code>showTemporary</code> is set to true.</li>
  </ul>

  <h4>Changes for 1.4.25</h4>
  <ul>
    <li>Dragging into a new Diagram now initializes it.</li>
    <li>Moving collapsed members of Groups now modifies position or location, depending on which is real.</li>
    <li>Fixed <a>ResizingTool</a>, which could make assumptions expecting a non-null <a>Shape.geometry</a>.</li>
  </ul>

  <h4>Changes for 1.4.24</h4>
  <ul>
    <li>Fixed routes of dragged Links after temporarily copying when the <a>UndoManager.isEnabled</a>.</li>
    <li>Fixed <a>DraggingTool</a> to disallow drag-and-drop from another <a>Diagram</a> whose <a>Model.dataFormat</a> is different than its own.</li>
    <li>
      <b style="color:red;">Reverting a change from 1.4.14 and 1.4.20</b>, setting <a>Picture.source</a> no longer sets the <code>crossOrigin</code>
      flag on generated images. This functionality can be customized with the undocumented property Picture.sourceCrossOrigin,
      a settable function that returns a new value for the <code>image.crossOrigin</code>. This property will be documented in 1.5.
    </li>
  </ul>

  <h4>Changes for 1.4.23</h4>
  <ul>
    <li><a>Part.updateAdornments</a> now calls <a>Panel.updateTargetBindings</a> on each <a>Adornment</a>.</li>
    <li>Changing the category of <a>Group</a>s no longer collapses sub-groups.</li>
    <li>Minimum width and height now correctly account for margins.</li>
    <li>Improved sizing of the <a>TextEditingTool</a>'s text editor.</li>
    <li>Improved routing of adjusted routes between Spot.None ports.</li>
  </ul>


  <h4>Changes for 1.4.22</h4>
  <ul>
    <li>Fixed a position initialization bug when <a>GraphObject.position</a> is data-bound and <a>Part.locationSpot</a> is not <a>Spot.TopLeft</a>.</li>
    <li>Updated the "Inductor" <a>Shape.figure</a>.</li>
    <li>Stopped the keyboard's Menu key from erroneously emitting an additional event.</li>
    <li><a>Shape.strokeDashArray</a> once again accepts zeroes as dash values, but does not accept an array of nothing but zeroes.</li>
    <li>Fixed <a>GraphObject.toMaxLinks</a> and <a>GraphObject.fromMaxLinks</a> property setters to allow Infinity (which is the default value).</li>
  </ul>

  <h4>Changes for 1.4.21</h4>
  <ul>
    <li>Fixed measuring Table Panels that contained only TableRow and TableColumns.</li>
    <li>Free up DOM elements by setting <a>Diagram.div</a> to null.</li>
  </ul>

  <h4>Changes for 1.4.20</h4>
  <ul>
    <li>Dynamically adding a <a>RowColumnDefinition</a> now updates its containing <a>Panel</a>.</li>
    <li>RowColumnDefinition width and height now correctly undo/redo.</li>
    <li>Fixed some <a>Link</a> routes when ungrouping collapsed <a>Group</a>s.</li>
    <li><a>Panel.Viewbox</a> will no longer attempt to set a <a>GraphObject</a>'s scale to zero.</li>
    <li>
      Setting <a>Picture.source</a> now conditionally sets the crossOrigin flag on the generated image.
      It is set to "anonymous" unless it is served from a data URI or the local filesystem (it will keep the default null value).
    </li>
    <li>Fixed <a>TextBlock.maxLines</a> not always working in some wrapping scenarios.</li>
    <li>Fixed routing of some Links when copied by <a>DraggingTool</a>.</li>
    <li>Fixed Link visibility issues when undoing tree collapsing and expanding.</li>
    <li>Fixed expand/collapse issues when two data-bound diagrams share a model.</li>
    <li>Group adornments are now correctly updated when collapsing trees.</li>
    <li>
      Fixed <a>CommandHandler.ungroupSelection</a> to expand the <a>Group</a> before removing its members and discarding the group,
      and to select any links in addition to the nodes.
    </li>
  </ul>

  <h4>Changes for 1.4.19</h4>
  <ul>
    <li>Improved panning performance on high-density displays.</li>
    <li>Fixed a bug introduced in 1.4.17 groups were unable to resize after parts were dragged out.</li>
    <li>Fixes to auto scrolling.</li>
  </ul>

  <h4>Changes for 1.4.18</h4>
  <ul>
    <li>Fixed some jumpover Links not recalculating their routes at the right time.</li>
    <li><a>Diagram.makeImage</a> "parts" option no longer conflicts with "position" option.</li>
  </ul>

  <h4>Changes for 1.4.17</h4>
  <ul>
    <li>Fixed initialization bug with Diagram.findObject... methods not working right after the inital layout completion.</li>
    <li>DraggingTool now ignores invisible parts when computing bounds of dragged Parts.</li>
    <li><a>Shape.strokeDashArray</a> no longer accepts zeroes as dash values.</li>
    <li>Fixed expanding moved <a>Group</a>s not to route <a>Link</a>s at original locations.</li>
    <li>Fixed DraggingTool not allowing Nodes to drag out of groups when grid snapping is enabled.</li>
  </ul>

  <h4>Changes for 1.4.16</h4>
  <ul>
    <li>Calculations for <a>Diagram.zoomPoint</a> values fixed when scroll and keyboard-command zooming.</li>
    <li>Fixed Picture copying, and Picture now reports draw errors in go-debug.</li>
    <li>Updated BPMN extension templates.</li>
  </ul>

  <h4>Changes for 1.4.15</h4>
  <ul>
    <li><a>Diagram.makeImage</a> and <a>Diagram.makeSvg</a> now stop animation before executing.</li>
    <li>Text rendering fixed when combining newlines (\n) with wrapped text.</li>
    <li>
      <a>TreeLayout</a> no longer causes an iteration exception when the <a>TreeLayout.roots</a> collection
      contains vertexes that are in the same tree.
    </li>
  </ul>

  <h4>Changes for 1.4.14</h4>
  <ul>
    <li>Text will always draw fully (instead of just a line at very small scales) when calling <a>Diagram.makeImage</a>.</li>
    <li>Setting <a>Picture.source</a> will now set the crossOrigin property of the created image to "anonymous" by default.</li>
  </ul>

  <h4>Changes for 1.4.13</h4>
  <ul>
    <li>Fixed hiding Adornments of <a>Link</a>s hidden by a connected <a>Node</a> becoming not visible.</li>
  </ul>

  <h4>Changes for 1.4.12</h4>
  <ul>
    <li>Fixed AvoidsNodes routing of member Links during Group initialization.</li>
    <li>Fixed Link route invalidation of duplicate links when loading model with <a>Link.points</a> data bound.</li>
    <li>Fixed Link routing when the port is a TableRow or TableColumn, or element inside one.</li>
    <li>Fixed incorrect error message when setting <a>Diagram.minScale</a> or <a>Diagram.maxScale</a> to their current values.</li>
  </ul>

  <h4>Changes for 1.4.11</h4>
  <ul>
    <li>Tweaked how shadows work for Parts that use Spot panels.</li>
    <li>Fixed line height calculations broken in 1.4.10. This was causing the TextEditingTool's textArea to grow too large.</li>
    <li>Fixed drawing issues arising from non-visible objects with a <a>GraphObject.opacity</a> set.</li>
  </ul>

  <h4>Changes for 1.4.10</h4>
  <ul>
    <li>Fixed link calculation when connecting to TableRows and TableColumns, and their immediate elements.</li>
    <li>Fixed dragging coordinates for Diagrams with pixel ratios other than 1.0.</li>
    <li>Fixed value for <a>Diagram.isModified</a> after undoing an insertion or removal after setting isModified to false.</li>
    <li>Fixed some objects not drawing during animation when initially out of view.</li>
    <li>Fixed <a>TreeLayout.layoutComments</a> to handle comment Nodes that are <a>Group</a>s.</li>
  </ul>

  <h4>Changes for 1.4.9</h4>
  <ul>
    <li>Added Introduction page for <a href="../intro/legends.html">Legends and Titles</a>.</li>
    <li>
      Fixed <a>LayoutNetwork.addParts</a> to treat links between nodes nested more than one Group deep as
      if they were connecting the outer Groups.
    </li>
    <li>
      Fixed case where making some changes, setting <a>Diagram.isModified</a> to false, undoing,
      and then making a new change (thereby discarding some <a>Transaction</a> history),
      resulted in isModified becoming false when it should have remained true.
    </li>
    <li>
      Fixed the invalidation of <a>Layout</a> when adding or removing a <a>Link</a> even though the link's
      <a>Part.layoutConditions</a> did not include <a>Part.LayoutAdded</a> or <a>Part.LayoutRemoved</a>.
    </li>
    <li>No longer give warnings when a <a>Picture.source</a> fails to load.</li>
    <li>Fixed some sizing issues in IE9 when CSS box-sizing is applied to all HTML elements.</li>
  </ul>

  <h4>Changes for 1.4.8</h4>
  <ul>
    <li>Improved completely disconnected <a>Link</a> geometry not to assume that it must be Bezier curved.</li>
    <li>Fixed a regression from 1.4.7 with link visibility when connected to Nodes in collapsed Groups.</li>
    <li>Fixed some starting transactions animating improperly.</li>
    <li>
      Fixed <a>DraggingTool</a> to use the Option key (Alt) modifier on a Mac to indicate a copying operation,
      rather than the Control key.
    </li>
  </ul>

  <h4>Changes for 1.4.7</h4>
  <ul>
    <li>
      Added the <a href="../extensions/PortShifting.html" target="_blank">Port Shifting</a> sample,
      with the tool defined in <a href="../extensions/PortShiftingTool.js">PortShiftingTool.js</a>,
      demonstrating how a custom <a>Tool</a> can allow the user to move a port within a node.
    </li>
    <li>
      Added a "semantic zoom" slider to the <a href="../samples/regrouping.html">Regrouping</a> sample,
      for controlling how many nested levels of Groups are expanded.
    </li>
    <li>Fixed some animation bugs on iOS/OSX Safari.</li>
    <li>
      Potentially Incompatible: Collapsed Groups no longer update their member's positions.
      They are only updated when they are visible again (when the group is expanded).
    </li>
  </ul>

  <h4>Changes for 1.4.6</h4>
  <ul>
    <li>
      New property <a>DraggingTool.isComplexRoutingRealtime</a> allows the disabling of <a>Link.AvoidsNodes</a>
      during dragging operations.
    </li>
    <li>Diagram.rebuildParts now allows animation.</li>
    <li>Improved animation by removing a race condition.</li>
    <li>
      Reworked link label position. This fixes bugs but may cause some link labels to have new positions,
      especially when <a>GraphObject.segmentOffset</a> values were NaN.
    </li>
  </ul>

  <h4>Changes for 1.4.5</h4>
  <ul>
    <li>
      Added the <a href="../extensions/Fishbone.html" target="_blank">Fishbone Layout</a> sample,
      with the layout defined in <a href="../extensions/FishboneLayout.js">FishboneLayout.js</a>,
      demonstrating how a custom <a>Layout</a> and a custom routed <a>Link</a> can
      produce a fishbone or Ishikawa or cause-and-effect diagram.
    </li>
    <li>GoJS now accounts for window.devicePixelRatio.</li>
  </ul>

  <h4>Changes for 1.4.4</h4>
  <ul>
    <li>New option for <a>Diagram.makeSvg</a>: elementFinished, a function allowing you to modify the SVG as it is being built.</li>
    <li>TextBlock ellipsis now works correctly with wrapped text.</li>
    <li>All GraphObjects now allow opacity: Panel.opacity has been moved to <a>GraphObject.opacity</a>.</li>
    <li>SVG generated with <a>Diagram.makeSvg</a> now contains the <code>xmlns</code> and <code>xmlns:xlink</code> attributes.</li>
  </ul>

  <h4>Changes for 1.4.3</h4>
  <ul>
    <li>Animations no longer continuously update the <a>Diagram.documentBounds</a>.</li>
    <li>Fixed window resizing accidentally invalidating (viewport-sized) layouts on fixed-size diagrams.</li>
    <li<a>Diagram.makeSvg</a> now includes a clipping region to fix IE's SVG behavior,
        which does not clip to its SVG viewport by default.</li>
    <li>
      New option for <a>Diagram.makeImage</a> and <a>Diagram.makeSvg</a>: document, which accepts an optional
      HTML Document in lieu of window.document.
      This can be useful when opening generated SVG or Images in a new window.
    </li>
  </ul>

  <h4>Changes for 1.4.2</h4>
  <ul>
    <li>
      Reworked transactions for the <a>TextEditingTool</a>.
      Transactions no longer start when the tool activates,
      instead they begin and end when the tool commits accepted text.
    </li>
    <li>Fixed Firefox's zoom shortcuts, CTRL-plus and CTRL-minus were not properly captured.</li>
  </ul>

  <h4>Changes for 1.4.1</h4>
  <ul>
    <li>Fixed visibility of <a>Link</a>s when changing <a>Layer.visible</a> of connected <a>Node</a>s.</li>
    <li>Fixed <a>DraggingTool</a> to allow moving of copied parts even though <a>Diagram.allowMove</a> is false.</li>
    <li>Improved dragging from <a>Palette</a> to show temporary copy of dragged parts within the Palette.</li>
    <li>Miscellaneous performance improvements.</li>
  </ul>

  <h4>Changes for 1.4 since 1.3.*</h4>
  <ul>
    <li>
      <b>Animation:</b>
      <ul>
        <li>GoJS layouts now animate by default. This can be controlled with a Diagram's <a>AnimationManager</a> class.</li>
      </ul>
    <li>
      <b>Samples and documentation:</b>
      <ul>
        <li>
          Added the <a href="../samples/swimBands.html" target="_blank">Layer Bands</a> sample,
          where the layout overrides the <a>TreeLayout.commitLayers</a> method in order to make sure the special
          "_BANDS" Part's items are updated to show a "band" object around each tree layer.
        </li>
        <li>
          Added the <a href="../extensions/LinkLabelDragging.html" target="_blank">Link Label Dragging</a> sample,
          with the tool defined in <a href="../extensions/LinkLabelDraggingTool.js">LinkLabelDraggingTool.js</a>,
          demonstrating how the user can manually adjust the position of link labels.
        </li>
        <li>
          Added the <a href="../extensions/NodeLabelDragging.html" target="_blank">Node Label Dragging</a> sample,
          with the tool defined in <a href="../extensions/NodeLabelDraggingTool.js">NodeLabelDraggingTool.js</a>,
          demonstrating how the user can manually adjust the position of node labels that are in "Spot" Panels.
        </li>
        <li>
          Added the <a href="../extensions/LinkShifting.html" target="_blank">Link Shifting</a> sample,
          with the tool defined in <a href="../extensions/LinkShiftingTool.js">LinkShiftingTool.js</a>,
          demonstrating how the user can manually shift the end of a link to connect anywhere along the sides of a node.
        </li>
        <li>
          Improved the <a href="../samples/friendWheel.html" target="_blank">Friend Wheel</a> sample
          to make use of <a>Part.isHighlighted</a>.
        </li>
        <li>Changed the documentation style.</li>
      </ul>
    </li>
    <li>
      <b>Diagram and Layer:</b>
      <ul>
        <li>Added the <a>AnimationManager</a> class and the <a>Diagram.animationManager</a> property.</li>
        <li>
          Added <a>Diagram.highlighteds</a> collection and <a>Diagram.highlight</a>, <a>Diagram.highlightCollection</a>,
          and <a>Diagram.clearHighlighteds</a> methods.
        </li>
        <li>
          <a>Diagram.selectCollection</a> now accepts an Array of <a>Part</a>s
          as well as an <a>Iterable</a> of <a>Part</a>s.
        </li>
        <li>
          When dragging out from a <a>Palette</a>, the cursor initially shows the "no-drop" cursor
          until it is over a diagram with <a>Diagram.allowDrop</a> true.
        </li>
      </ul>
    </li>
    <li>
      <b>Parts:</b>
      <ul>
        <li>Added the <a>Part.isAnimated</a> property (default is true).</li>
        <li>
          Added <a>Part.isHighlighted</a> property, a standard way of declaring that a Part is highlighted.
          Use data binding to change the appearance of your parts, e.g.:<br />
          <code>new go.Binding("stroke", "isHighlighted", function (h) { return h ? "red" : "black"; }).ofObject()</code>
        </li>
        <li>
          Added <a>Group.findExternalLinksConnected</a> and <a>Group.findExternalNodesConnected</a> methods,
          to find connections from anywhere inside a Group (including inside nested Groups) to anywhere outside of that Group.
        </li>
        <li>
          Fixed changing layers of Nodes and Links not to call <a>Group.memberAdded</a>, <a>Group.memberRemoved</a>,
          <a>Node.linkConnected</a>, or <a>Node.linkDisconnected</a> event handlers.
        </li>
        <li>Fixed routing of Bezier Links when <a>Link.adjusting</a> is not None.</li>
        <li>
          Fixed a case of undoing the deletion of a port on a Node causing connected Links to
          be connecting with the whole node instead of the particular port element.
        </li>
        <li>
          Fixed the spreading of side <a>Link</a> connection points on a <a>Group</a> when some of
          the links are actually connected with non-visible member <a>Node</a>s because the Group is collapsed.
        </li>
      </ul>
    </li>
    <li>
      <b>GraphObjects and Geometry:</b>
      <ul>
        <li>
          Added <a>TextBlock.overflow</a> property and <a>TextBlock.OverflowEllipsis</a> and
          <a>TextBlock.OverflowClip</a> enum values;
          clipping is the default behavior when there is not enough room to draw all of the text.
        </li>
        <li>
          Added <a>Panel.itemIndex</a>, set automatically for Panels created to represent itemArray items and
          useful in data bindings within item templates.
        </li>
        <li>
          Invalid color strings now result in errors when using <code>"go-debug.js"</code>,
          making it easier to track down painting problems.
        </li>
      </ul>
    </li>
    <li>
      <b>Models:</b>
      <ul>
        <li>
          Undo and redo operations now raise "ChangingSelection" and "ChangedSelection" <a>DiagramEvent</a>s,
          to handle cases where the undo or redo deleted selected Parts.
        </li>
        <li>Fixed updating of <a>Binding</a>s to the empty string property name when a specific data property was changed.</li>
      </ul>
    </li>
    <li>
      <b>Layouts:</b>
      <ul>
        <li>
          Added <a>TreeLayout.layerStyle</a> property;
          when set to the new enum value <a>TreeLayout.LayerUniform</a>, all nodes at the same layer level will be aligned.
          The default value, <a>TreeLayout.LayerIndividual</a>, produces the original behavior where each node only takes
          up as much depth as it needs, causing its children not necessarily to be aligned with its siblings' children.
        </li>
        <li>
          Added <a>TreeLayout.commitLayers</a> and <a>LayeredDigraphLayout.commitLayers</a> overridable methods,
          for getting information about the size and position of the "bands" (layout layers) cutting across the diagram,
          which is useful when positioning labels or putting rectangular areas behind each band.
        </li>
        <li>Fixed <a>LayoutVertex.focus</a> to be at the center of the <a>Part.locationObject</a>.</li>
        <li>Fixed <a>GridLayout</a>'s wrapping being influenced by the setting of <a>Layout.arrangementOrigin</a>.</li>
      </ul>
    </li>
    <li>
      <b>Tools and Commands:</b>
      <ul>
        <li>Removed ZoomIn and ZoomOut commands from the default touch context menu.</li>
        <li>Added <a>DraggingTool.isCopyEnabled</a>, to allow disabling of copying by control-drag-drop without disabling copying altogether.</li>
        <li>Added <a>ContextMenuTool.currentObject</a>, to make it easier to refer to the <a>GraphObject</a> for which the context menu is being shown.</li>
        <li>Fixed some versions of Android Browser causing two click events for a single tap.</li>
        <li><b style="color:red;">New Gesture: </b>Zooming with MSGesture events is now supported on Microsoft touch devices.</li>
      </ul>
    </li>
    <li>
      <b>Collections:</b>
      <ul>
        <li>
          Added <a>Iterator.any</a>, <a>List.any</a>, <a>Set.any</a>, and <a>Map.any</a> methods that take a predicate function as an argument
          and return true if the predicate is true for at least one item in the collection.
        </li>
        <li>
          Added <a>Iterator.all</a>, <a>List.all</a>, <a>Set.all</a>, and <a>Map.all</a> methods that take a predicate function as an argument
          and return false if the predicate is false for at least one item in the collection.
        </li>
        <li>Added <a>Iterator.each</a>, <a>List.each</a>, <a>Set.each</a>, and <a>Map.each</a> methods that take a function as an argument and call it on each item in the collection.</li>
        <li>Added <a>Map.first</a> method, returning a key/value pair object, or null if the Map is empty.</li>
        <li>Fixed <code>aMap.iterator.first()</code> to return a key/value pair object, not the first key.</li>
        <li>
          Added <a>Map.iteratorValues</a> property, for iterating over the values in the Map.
          Added <a>Map.iteratorKeys</a> property, for iterating over the keys of the Map.
          (<a>Map.iterator</a> continues to return an Iterator for iterating over the keys and values of the Map.
          This is the same as <a>Map.iteratorValues</a> unless one calls <code>first</code>, <code>any</code>, <code>all</code>, or <code>each</code> on the Iterator.)
        </li>
      </ul>
    </li>
  </ul>

  <hr />

  <h4>Changes for 1.3.11</h4>
  <ul>
    <li>Improved re-routing of Links to deeply nested subgraph Nodes upon expanding a subgraph.</li>
    <li>Fixed potential error in <a>GridLayout</a> when switching template for an existing <a>Group</a>.</li>
    <li>Brush copies now correctly copy start and end Spot values</li>
  </ul>

  <h4>Changes for 1.3.10</h4>
  <ul>
    <li>Fixed some bounds calculations of elements inside of TableRow and TableColumn Panels.</li>
    <li>Fixed the "Modified" <a>DiagramEvent</a> when the <a>UndoManager</a> is not enabled.</li>
    <li>Improved AvoidsNodes routing of Links when there are Nodes that are not visible.</li>
    <li>Fixed Diagram background grid issues when an Overview was only partially initialized.</li>
  </ul>

  <h4>Changes for 1.3.9</h4>
  <ul>
    <li>The TextEditingTool now checks Diagram.allowTextEdit (previously, only CommandHandler.canEditTextBlock did).</li>
    <li>
      Changing a drag from a move to a copy (with the control key) now correctly saves any link routes so that an undo/redo
      does not restore the routes to where the node had been moved to before being copied.
    </li>
    <li>Panels with no elements now properly respect all combinations of desiredSize, minSize, maxSize, and padding.</li>
    <li>
      Allowed SVG to work with Picture elements on browsers that support drawing SVG to canvas.
      See the <a href="../intro/pictures.html" target="_blank">Pictures intro page</a> for details.
    </li>
    <li>Fixed internal line-intersection for TableRow and TableColumn Panels.</li>
  </ul>

  <h4>Changes for 1.3.8</h4>
  <ul>
    <li>Fixed the measurement of some GraphObjects when modifying angle with both a desiredSize and minSize set.</li>
    <li>Fixed <a>Diagram.addLayerAfter</a> and <a>Diagram.addLayerBefore</a> for re-ordering layers, and improved their error checking.</li>
  </ul>

  <h4>Changes for 1.3.7</h4>
  <ul>
    <li>Fixed <a>Set.toList</a>.</li>
    <li>Fixed the <a>Diagram.model</a> property setter to call <a>Diagram.clearSelection</a> before actually replacing the model.</li>
    <li>Fixed Picture measuring scenarios where it would incorrectly prefer a stretch value over the desiredSize when both were given.</li>
    <li>The <a>Link.points</a> setter now also accepts an Array of numbers representing point values ([x1, y1, x2, y2, x3, y3], etc.)</li>
  </ul>

  <h4>Changes for 1.3.6</h4>
  <ul>
    <li>Added <a href="../samples/seatingChart.html" target="_blank">Seating Chart</a> sample.</li>
    <li>Fixed a bug in calculating positions of member nodes when dragging a group.</li>
    <li>
      The "TreeExpanderButton" and "SubGraphExpanderButton" <a>Panel</a>s are now
      calling <a>CommandHandler.canCollapseTree</a>, <a>CommandHandler.canExpandTree</a>,
      <a>CommandHandler.canCollapseSubGraph</a>, or <a>CommandHandler.canExpandSubGraph</a>, as
      appropriate, in case any of those methods were overridden.
    </li>
    <li>
      <a>Tool.standardMouseWheel</a> now calls <a>CommandHandler.canIncreaseZoom</a> or
      <a>CommandHandler.canDecreaseZoom</a>, as appropriate, in case either method is overridden.
    </li>
  </ul>

  <h4>Changes for 1.3.5</h4>
  <ul>
    <li>
      Added <a>Model.addNodeDataCollection</a>, <a>Model.removeNodeDataCollection</a>,
      <a>GraphLinksModel.addLinkDataCollection</a>, <a>GraphLinksModel.removeLinkDataCollection</a>,
      taking either Arrays or Iterables of model data objects, for convenience.
    </li>
    <li>Fixed Table Panel's measuring of GraphObjects that span multiple rows and columns in some situations.</li>
    <li>Fixed <a>Node.ports</a> to include the default port, the whole <a>Node</a>, when there are no objects with <a>GraphObject.portId</a> set to non-null.</li>
    <li>Fixed some method names on <a>Spot</a> which had not been exported.</li>
    <li>Fixed the scaling of some arcs in a Geometry.</li>
  </ul>

  <h4>Changes for 1.3.4</h4>
  <ul>
    <li>
      Added the <a href="../extensions/Robot.html" target="_blank">Robot</a> sample in the extensions directory,
      demonstrating the simulation of input events.
    </li>
    <li>Added the "Ring" figure for <a>Shape</a>s.</li>
    <li>
      Added property setters for <a>InputEvent</a> properties: control, shift, alt, meta, left, middle, right,
      for convenience when initializing to avoid requiring knowledge of the particular flag values.
    </li>
    <li>
      Added <a>Part.LayoutNodeReplaced</a> as a new reason for invalidating <a>Layout</a>s,
      to fix a bug where a Layout would not be performed when replacing a Node or simple Part by changing its <a>Part.category</a>,
      because the new Node had a fixed size.
    </li>
    <li>Scrolling on uninitialized Diagrams will no longer capture the event and prevent bubbling.</li>
    <li>Fixed shadows in some <a>Panel</a> scenarios involving Auto panels.</li>
    <li>Fixed the display of never-arranged Nodes when added to an invisible <a>Layer</a> that is later made visible.</li>
    <li>Fixed data binding on the first elements of "Spot", "Auto", and "Link" <a>Panel</a>s that hold <a>Panel.itemArray</a>s.</li>
    <li><a>Margin.parse</a> now parses strings with only zero, one, or two numbers in them, as if calling the <a>Margin</a> constructor.</li>
    <li>Fixed the <a>Diagram.grid</a> setter, which was not always updating the grid immediately.</li>
    <li>
      <b style="color:red;">Potentially Incompatible:</b> Fixed Table Panel's allocation of cell size in some complex settings,
      such as with multiple rows or columns stretching. Some complex Table Panels may size differently now.
    </li>
  </ul>

  <h4>Changes for 1.3.3</h4>
  <ul>
    <li>Added <a>CommandHandler.defaultScale</a> property, initially 1.0.</li>
    <li>
      When AMD Module <code>define</code> capability is present, <code>go</code> is still exposed to the global object,
      which avoids problems with undefined <code>go</code> when explicitly loading <code>"go.js"</code> instead of using your framework's require mechanisms.
    </li>
    <li>Reduced possible errors with zero-sized images used as <a>Picture</a> sources.</li>
    <li>Fixed default value of <code>scale</code> for <a>Diagram.makeImage</a> (Default should be <code>null</code>, was erroneously <code>NaN</code>).
    <li>Zero is now an allowed value in the array of <a>Shape.strokeDashArray</a></li>
  </ul>

  <h4>Changes for 1.3.2</h4>
  <ul>
    <li>Fixed exception when <a>Diagram.makeImage</a> generates very large images.</li>
    <li>Fixed Layouts maintaining custom link routing in nested groups.</li>
    <li>Fixed tree collapsing causing some links to not update when the tree is expanded after moving the node.</li>
    <li>Fixed the drawing of strokes when <a>Shape.strokeWidth</a> is zero.</li>
  </ul>

  <h4>Changes for 1.3.1</h4>
  <ul>
    <li>Fixed computation of tree relationships when <a>Link.isTreeLink</a> is modified dynamically.</li>
    <li>
      Fixed the behavior of <a>GraphObject.mouseDragEnter</a> and <a>GraphObject.mouseDragLeave</a> and
      the <a href="../samples/regrouping.html" target="_blank">Regrouping</a> and
      <a href="../samples/planogram.html" target="_blank">Planogram</a> samples
      not to depend on the target <a>Diagram.selection</a> for external drag-and-drops.
    </li>
    <li>Fixed bounds calculations when using the <a>DraggingTool</a> with Parts that were not in the default layer.</li>
    <li>
      Implemented support for comments in <a>ForceDirectedLayout</a>;
      for compatibility and efficiency <a>ForceDirectedLayout.comments</a> now defaults to false.
      Also added overridable method <a>ForceDirectedLayout.addComments</a>.
    </li>
    <li>
      Added <a>TreeLayout.comments</a> property,
      for efficiency by disabling searching for "Comment" Nodes associated with each Node;
      for compatibility the default value is true.
    </li>
    <li>Allowed <a>Diagram.makeImage</a> to accept no arguments again.</li>
  </ul>

  <h4>Changes for 1.3 since 1.2.*</h4>
  <ul>
    <li>
      <b>Samples and documentation:</b>
      <ul>
        <li>Added the <a href="../samples/tournament.html" target="_blank">Tournament</a> sample.</li>
        <li>Added the <a href="../samples/draggableLink.html" target="_blank">Draggable Link</a> sample, demonstrating partly or fully disconnected <a>Link</a>s.</li>
        <li>Added the <a href="../samples/require.html" target="_blank">Require</a> sample, demonstrating use of <b>GoJS</b> AMD module definition and use with RequireJS.</li>
        <li>Added the <a href="../samples/angular.html" target="_blank">Angular</a> sample, demonstrating a <b>GoJS</b> "goDiagram" directive in AngularJS.</li>
        <li>Added the <a href="../extensions/BPMN.html" target="_blank">BPMN Editor</a> sample in the extensions directory, demonstrating BPMN templates and using custom tools.
      </ul>
    </li>
    <li>
      <b>Diagram and Layer:</b>
      <ul>
        <li>
          Added support for (static) SVG generation with <a>Diagram.makeSvg</a>.
          You can generate an SVG scene of all or part of a Diagram using the same
          options that <a>Diagram.makeImage</a> takes.
        </li>
        <li>
          Added a "Modified" <a>DiagramEvent</a>, to support updating non-Diagram UI
          after the <a>Diagram.isModified</a> property has changed.
          Many samples now implement such a listener to add a "*" to the document title and to enable the "Save" Button.
          A "Modified" DiagramEvent listener should not modify the Diagram or its Model.
          Replacing the <a>Diagram.model</a> now automatically sets <a>Diagram.isModified</a>
          to false, but you still have to set it when you save a diagram.
        </li>
        <li>
          Added <a>Diagram.copyParts</a> method, for copying a collection of Parts and
          returning a <a>Map</a> of original Parts and their respective copies.
          (This is called by <a>CommandHandler.copySelection</a> and <a>CommandHandler.pasteSelection</a> and the <a>DraggingTool</a>.)
        </li>
        <li>
          Added <a>Diagram.removeParts</a> method, for deleting a collection of Parts.
          (This is called by <a>CommandHandler.deleteSelection</a>.)
        </li>
        <li>
          Added <a>Diagram.moveParts</a> method, for shifting the location of a collection of Parts.
          (This is called by the <a>DraggingTool</a> and <a>CommandHandler.pasteSelection</a>.)
          Moving with a zero offset will align the parts to the grid, if <a>DraggingTool.isGridSnapEnabled</a> is true.
        </li>
        <li>
          Fixed <a>Diagram.findPartAt</a> with a false <i>selectable</i> argument,
          to ignore temporary <a>Layer</a>s, just as it always has when <i>selectable</i> is true.
        </li>
        <li>
          Fixed <a>Diagram.findObjectAt</a> (and similar methods) not correctly finding remaining TableRow or TableColumn <a>Panel</a>s
          in Table Panels that have been modified.
        </li>
        <li>
          Fixed some cases where Layouts with <code><a>Layout.isRealtime</a> == false</code> would perform their layout at incorrect times.
        </li>
        <li>
          There is now an implicit transaction that surrounds the initial layout of a Diagram.
          This ensures that all model Changed listeners are called at a time when all of the diagram state has been updated.
        </li>
        <li>
          <a>Diagram.hasHorizontalScrollbar</a> and <a>Diagram.hasVerticalScrollbar</a> now trigger an update to remove or add the scrollbars appropriately.
        </li>
      </ul>
    </li>
    <li>
      <b>Parts:</b>
      <ul>
        <li>
          The default <a>Diagram.nodeSelectionAdornmentTemplate</a>, <a>Diagram.groupSelectionAdornmentTemplate</a>,
          <a>Diagram.linkSelectionAdornmentTemplate</a>, <a>ResizingTool.handleArchetype</a>,
          <a>LinkReshapingTool.handleArchetype</a>, <a>LinkReshapingTool.midHandleArchetype</a>,
          <a>RelinkingTool.fromHandleArchetype</a>, <a>RelinkingTool.toHandleArchetype</a>, and
          <a>RotatingTool.handleArchetype</a> now all default to showing blue handles.
        </li>
        <li>
          Added <a>Node.linkValidation</a> property, which if non-null, is called by <a>LinkingBaseTool.isValidLink</a>
          to support validating potential links at each node,
          in addition to the <a>LinkingBaseTool.linkValidation</a> on the <a>LinkingTool</a> and <a>RelinkingTool</a>.
        </li>
        <li>
          Added <a>Group.computesBoundsIncludingLinks</a> property, which if false causes the computation of
          a <a>Group</a>'s members bounds to ignore <a>Link</a>s.
        </li>
        <li>
          Added <a>Group.computesBoundsIncludingLocation</a> property, which if true causes the computation
          of a <a>Group</a>'s members bounds to include its current Location.
          This is helpful to allow users to move member nodes at the top down or at the left side rightwards,
          without necessarily shrinking the <a>Placeholder</a> and shifting it down or towards the right.
        </li>
        <li>
          Fixed <a>RotatingTool.updateAdornments</a> not to require the rotation Adornment to use a <a>Part.locationSpot</a> of Spot.Center.
        </li>
        <li>
          Copying a <a>Link</a> with AvoidsNodes routing no longer invalidates the route of the original Link.
        </li>
      </ul>
    </li>
    <li>
      <b>GraphObjects and Geometry:</b>
      <ul>
        <li>
          Added <a>Point.projectOntoLineSegment</a>, <a>Point.projectOntoLineSegmentPoint</a>,
          <a>Point.snapToGrid</a> and <a>Point.snapToGridPoint</a> methods.
        </li>
        <li>
          Corrected some Table Panel layouts with complex sizing rules.
        </li>
        <li>
          Added a new arrowhead (<a>Shape.toArrow</a> and <a>Shape.fromArrow</a>), the empty string (""),
          which can be used to turn an arrowhead "off" without making ths Shape revert to a regular figure.
        </li>
      </ul>
    </li>
    <li>
      <b>Models:</b>
      <ul>
        <li>
          A regular <a>Node</a> may become a label node on a <a>Link</a> or vice-versa, dynamically.
          Whether a node is a link label node is determined in a <a>GraphLinksModel</a> by whether
          there is a reference to the node in the link's <a>GraphLinksModel.getLabelKeysForLinkData</a> Array.
          You can use whatever category you like to choose the node template used to represent the node data;
          "LinkLabel" is the default predefined category for link label nodes.
        </li>
        <li>
          Added <a>Model.modelData</a> property, a JavaScript object for programmer-defined
          properties that are written by <a>Model.toJson</a> and read by <a>Model.fromJson</a>.
          This provides easy persistence of properties that are for the whole model,
          not for individual nodes or links.
        </li>
        <li>
          A <a>Binding</a> target of <a>GraphObject.name</a> now may produce an error.
          A TwoWay <a>Binding</a> whose source is the key property on node data now may produce an error.
          These kinds of Bindings have always been disallowed,
          but now are more likely to produce an error that can be seen in the console log.
        </li>
        <li>
          Added <a>ChangedEvent.isTransactionFinished</a> property,
          for convenience in detecting model changes that are of type <a>ChangedEvent.Transaction</a>
          and indicate the end of a committed transaction or undo or redo.
        </li>
        <li>
          Fixed <a>Model.addArrayItem</a> and <a>Model.insertArrayItem</a> to accept non-Object new item values.
        </li>
      </ul>
    </li>
    <!--
    <li><b>Layouts:</b>
      <ul>
        (none)
      </ul>
    </li>
    -->
    <li>
      <b>Tools and Commands:</b>
      <ul>
        <li>
          <b style="color:red;">Potentially Incompatible:</b>
          Mac-based platforms now use the Command key instead of Control for almost all commands.
          For instance the undo command is Control-Z on Windows and Linux platforms and Command-Z on Macs.
          This is more canonical on Macs, but could cause incompatibilities if custom tools were created.
        </li>
        <li>
          <b style="color:red;">New Gesture:</b> On iOS devices, a two-finger pan now pans the page instead of the Diagram.
        </li>
        <li>
          Scrolling and zooming with a mouse wheel can now be used on scrolling devices and
          trackpads that allow for less than one "click" of a scroll wheel, accommodating finer scrolling.
        </li>
        <li>
          The <a>TextEditingTool</a> now automatically selects text upon focus.
        </li>
        <li>
          The <a>TextEditingTool</a> now demands focus until it is completed or cancelled.
        </li>
        <li>
          Added <a>LinkReshapingTool.getReshapingBehavior</a> and <a>LinkReshapingTool.setReshapingBehavior</a>
          to allow overrides of <a>LinkReshapingTool</a> methods access to the permitted
          user reshaping behaviors of particular reshape handles.
        </li>
        <li>
          Added <a>RelinkingTool.copyLinkProperties</a> method, which copies properties of the
          selected Link to the <a>LinkingBaseTool.temporaryLink</a>.
        </li>
        <li>
          Added <a>LinkingBaseTool.isUnconnectedLinkValid</a> property on <a>LinkingTool</a> or <a>RelinkingTool</a>,
          to control whether the user may draw new links or reconnect existing links to no port/node.
        </li>
        <li>
          Added <a>DraggingTool.dragsLink</a> property, to control whether the user may drag a single link,
          disconnecting it from any nodes, and perhaps reconnecting the link at one or both ends.
        </li>
        <li>
          Added <a>DraggingTool.startPoint</a> property, to improve ability to simulate drag-and-drops.
        </li>
        <li>
          Added <a>CommandHandler.copiesParentKey</a> and <a>CommandHandler.copiesGroupKey</a> properties,
          to have a copy/pasted new node automatically be a child of the original node's tree parent or
          a member of the original node's containing group.
        </li>
        <li>
          Resizing, reshaping, rotating, and relinking tool Adornments no longer appear on selected Parts
          that are in Palettes or other Diagrams that are <a>Diagram.isReadOnly</a>.
        </li>
        <li>
          Improved <a>Part.updateAdornments</a> to hide or show tool adornments on selected Parts as their
          <a>Part.reshapable</a>, <a>Part.resizable</a>, or <a>Part.rotatable</a> properties are modified dynamically.
        </li>
        <li>
          Only a left-button mouse-down will allow <a>LinkReshapingTool.canStart</a> to return true;
          other buttons no longer cause the LinkReshapingTool to start.
        </li>
        <li>
          Fixed some cases where a copy-pasted Part had a different location than the original.
        </li>
      </ul>
    </li>
  </ul>

  <hr />

  <h4>Changes for 1.2.8</h4>
  <ul>
    <li>Fixed some relinking bugs with undo/redo.</li>
    <li>Some table panel measurement fixes.</li>
  </ul>

  <h4>Changes for 1.2.7</h4>
  <ul>
    <li>Fixed exception when changing <a>Panel.itemArray</a> decreased the number of items in an <a>Adornment</a> or <a>Group</a>.</li>
    <li>Fixed mouse cursor on Diagram (<a>Diagram.currentCursor</a>, <a>Diagram.defaultCursor</a>) erroneously setting the cursor for the entire page.</li>
    <li>Touch-zoom gestures now correctly respect <a>Diagram.minScale</a>, <a>Diagram.maxScale</a>, and <a>Diagram.allowZoom</a> on all platforms.</li>
  </ul>

  <h4>Changes for 1.2.6</h4>
  <ul>
    <li>Fixed the setter for <a>Shape.strokeDashArray</a>, which incorrectly discarded null as a value.</li>
    <li>Fixed a divide-by-zero scenario in link routing.</li>
    <li>Stopped Table Panel rows and columns with only stretch elements from taking up inappropriate space.</li>
    <li>Other minor Table Panel fixes.</li>
  </ul>

  <h4>Changes for 1.2.5</h4>
  <ul>
    <li>Fixed context menu clicks on touch-capable devices when a mouse-right click was performed on an object with no available context menu.</li>
    <li>Fixed some areaBackgrounds when they used shared brushes with objects of identical size, when those objects are rotated at different angles.</li>
    <li>Fixed object picking after calling <a>Diagram.makeImage</a> with a non-default viewport.</li>
  </ul>

  <h4>Changes for 1.2.4</h4>
  <ul>
    <li>Fixed double-clicking in some circumstances on IE10 and IE11.</li>
    <li>Fixed initial performance of <a>Group.layout</a>s even when <a>Layout.isInitial</a> was false.</li>
    <li>Fixed some bugs with zero and near-zero sized Diagrams that caused update loops when layouts were <a>Layout.isViewportSized</a>.</li>
    <li>Fixed <a>Link.getLinkDirection</a> to return better values for rotated ports when the <a>Node</a> is not rotated.</li>
    <li><a>GraphObject.getDocumentAngle</a> now returns a normalized angle from 0 to 360, instead of returning an angle between -180 and 180.</li>
  </ul>

  <h4>Changes for 1.2.3</h4>
  <ul>
    <li>Fixed shadow drawing on Parts that had a non-real position.</li>
    <li>Fixed <a>Diagram.isEnabled</a> failing to disable scrollbars.</li>
    <li>Fixed some issues with dynamic Picture loading, and decreased time between tests for loaded images.</li>
    <li>Fixed some errors with odd Diagram sizes, including disallowing negative-sized Diagrams in Internet Explorer.</li>
    <li>Fixed <a>Panel.findRowForLocalY</a> and <a>Panel.findColumnForLocalX</a> when the input was a negative number.</li>
    <li>Auto Panels now correctly measure main Shape elements that have a <a>Shape.geometryStretch</a> of Uniform, such as the figures 'Circle' and 'Square'.</li>
    <li>Auto Panels now correctly re-measure TextBlock elements when the Panel's size changes dynamically (ie, desiredSize).</li>
  </ul>

  <h4>Changes for 1.2.2</h4>
  <ul>
    <li>Added CommandHandler functions: <a>CommandHandler.showContextMenu</a> and <a>CommandHandler.canShowContextMenu</a>.</li>
    <li>Added key-binding for Menu key to invoke <a>CommandHandler.showContextMenu</a>.</li>
    <li>Fixed <a>TextEditingTool</a> sizing in some configurations.</li>
    <li><a>Shape.strokeDashArray</a> now checks for zero, negative, and non-number values, and there is a fix for non-native dash drawing with offsets.</li>
    <li>Fixed miscellaneous sizing issues with near-zero sized Diagrams.</li>
  </ul>

  <h4>Changes for 1.2.1</h4>
  <ul>
    <li>Fixed non-routing of the original <a>Link</a>s after they have been copied.</li>
    <li>Fixed positioning of link label nodes that are <a>Group</a>s.</li>
  </ul>

  <h4>Changes for 1.2 since 1.1.*</h4>
  <ul>
    <li>Added a TypeScript definition file: <code>release/GoJS.d.ts</code> for better type-checking when using TypeScript and for Intellisense support in Visual Studio.</li>

    <li>
      Added Extensions of <a>Tool</a>, <a>Layout</a>, and <a>CommandHandler</a>:
      <ul>
        <li>
          Added the <a href="../extensions/DragZooming.html" target="_blank">Drag Zooming Tool</a> sample,
          with the tool defined in <a href="DragZoomingTool.js">DragZoomingTool.js</a>.
        </li>
        <li>
          Added the <a href="../extensions/FreehandDrawing.html" target="_blank">Freehand Drawing Tool</a> sample,
          with the tool defined in <a href="FreehandDrawingTool.js">FreehandDrawingTool.js</a>.
        </li>
        <li>
          Added the <a href="../extensions/PolygonDrawing.html" target="_blank">Polygon Drawing Tool</a> sample,
          with the tool defined in <a href="PolygonDrawingTool.js">PolygonDrawingTool.js</a>.
        </li>
        <li>
          Added the <a href="../extensions/PolylineLinking.html" target="_blank">Polyline Linking Tool</a> sample,
          with the tool defined in <a href="PolylineLinkingTool.js">PolylineLinkingTool.js</a>.
        </li>
        <li>
          Added the <a href="../extensions/Serpentine.html" target="_blank">Serpentine Layout</a> sample,
          with the layout defined in <a href="SerpentineLayout.js">SerpentineLayout.js</a>.
        </li>
        <li>
          Added the <a href="../extensions/FloorPlanEditor.html" target="_blank">Floor Plan Editor</a> and
          <a href="../extensions/FloorPlanMonitor.html" target="_blank">Floor Plan Monitor</a> samples,
          demonstrating several tools and a command handler:
          <ul>
            <li><a href="../extensions/GuidedDraggingTool.js">GuidedDraggingTool.js</a></li>
            <li><a href="../extensions/ResizeMultipleTool.js">ResizeMultipleTool.js</a></li>
            <li><a href="../extensions/RotateMultipleTool.js">RotateMultipleTool.js</a></li>
            <li><a href="../extensions/DrawCommandHandler.js">DrawCommandHandler.js</a></li>
          </ul>
        </li>
      </ul>
    </li>

    <li>
      Samples:
      <ul>
        <li>Added the <a href="../samples/euler.html" target="_blank">Euler Diagram</a> sample.</li>
        <li>Added the <a href="../samples/grafcet.html" target="_blank">Grafcet Diagrams</a> sample.</li>
        <li>Added the <a href="../samples/network.html" target="_blank">Network Configuration</a> sample.</li>
        <li>Added the <a href="../samples/radial.html" target="_blank">Recentering Radial Layout</a> sample.</li>
        <li>Added the <a href="../samples/regrouping.html" target="_blank">Regrouping</a> sample.</li>
      </ul>
    </li>

    <li>
      Selection and Tool <a>Adornment</a>s are now virtualized:
      <ul>
        <li>Adornments are only created automatically when viewed.</li>
        <li>The "Adornment" <a>Layer</a>'s part count will only reflect Adornments created so far.</li>
        <li>
          <a>Part.adornments</a> will be empty for Parts that should have Adornments (i.e., are selected) but have yet to be viewed.
          (<a>Part.adornments</a> will never be null.)
        </li>
        <li>If your app needs Adornments that should exist but are off-screen you can call <a>Part.updateAdornments</a> to create them.</li>
      </ul>
    </li>

    <li>
      Trees:
      <ul>
        <li>Added a parameter to <a>Node.findTreeParts</a> to control how much of a subtree is returned.</li>
        <li>Added a parameter to <a>Node.collapseTree</a> and <a>Node.expandTree</a> for controlling how much of a tree is collapsed or expanded.</li>
        <li>Added <a>Node.findTreeRoot</a> method for walking up the chain of tree parent links.</li>
        <li>Added <a>Diagram.findTreeRoots</a> method for finding all root <a>Node</a>s of trees.</li>
        <li>
          Added <a>Link.isTreeLink</a> property; set to false to have tree-oriented methods ignore such <a>Link</a>s,
          which is convenient when you want a tree-structured diagram using a <a>GraphLinksModel</a> with additional links connecting the nodes.
        </li>
        <li>Fixed <a>Node.collapseTree</a> not causing the Diagram to redraw.</li>

        <li><a>TreeLayout.roots</a> collection now holds <a>TreeVertex</a>es, although Nodes in that collection are still supported for compatibility.</li>
        <li>Added overridable <a>TreeLayout.initializeTreeVertexValues</a> method.</li>
        <li>Added overridable <a>TreeLayout.addComments</a> and <a>TreeLayout.layoutComments</a> methods.</li>
        <li>Added overridable <a>TreeLayout.arrangeTrees</a> method.</li>
      </ul>
    </li>

    <li>
      Links:
      <ul>
        <li>Added <a>Link.isOrthogonal</a> read-only property, for convenience in checking the kind of routing a Link does.</li>
        <li>
          Added <a>Link.getLinkPointFromPoint</a>, <a>Link.getLinkPoint</a>, and <a>Link.getLinkDirection</a> overridable methods,
          to help customize the computation of link routes where a link connects with a port.
        </li>
        <li>Added <a>Link.resegmentable</a> and <a>LinkReshapingTool.midHandleArchetype</a> properties to allow users to add and remove straight segments from links.</li>
        <li>Added <a>LinkingBaseTool.portTargeted</a> functional property as an event handler that is called during a linking or relinking operation.</li>
        <li>
          Added <a>LinkingBaseTool.copyPortProperties</a> and <a>LinkingBaseTool.setNoTargetPortProperties</a> overridable methods,
          for customizing the behavior during linking and relinking operations, when setting <a>LinkingBaseTool.portTargeted</a> is not enough.
        </li>
        <li>The <a>LinkingTool</a> and <a>RelinkingTool</a> now autoscroll when dragging the end of a link just inside the edge of the viewport.</li>
      </ul>
    </li>

    <li>
      Added Row and Column separators in Table Panels:
      <ul>
        <li><a>RowColumnDefinition.separatorPadding</a></li>
        <li><a>RowColumnDefinition.separatorStroke</a></li>
        <li><a>RowColumnDefinition.separatorStrokeWidth</a></li>
        <li><a>RowColumnDefinition.separatorDashArray</a></li>
        <li><a>RowColumnDefinition.background</a></li>
        <li><a>RowColumnDefinition.coversSeparators</a></li>
        <li><a>RowColumnDefinition.total</a></li>
        <li><a>Panel.defaultSeparatorPadding</a></li>
        <li><a>Panel.defaultRowSeparatorStroke</a></li>
        <li><a>Panel.defaultRowSeparatorStrokeWidth</a></li>
        <li><a>Panel.defaultRowSeparatorDashArray</a></li>
        <li><a>Panel.defaultColumnSeparatorStroke</a></li>
        <li><a>Panel.defaultColumnSeparatorStrokeWidth</a></li>
        <li><a>Panel.defaultColumnSeparatorDashArray</a></li>
      </ul>
    </li>

    <li>
      Diagrams and Layers:
      <ul>
        <li>Added <a>Diagram.findTopLevelGroups</a> method for finding all unnested <a>Group</a>s.</li>
        <li>Added a <i>partialInclusion</i> argument to <a>Diagram.findObjectsNear</a> and <a>Layer.findObjectsNear</a>.</li>
        <li>
          Added <a>Layer.pickable</a> and <a>GraphObject.pickable</a> properties, to permit visual objects to be ignored by methods such as <a>Diagram.findObjectAt</a>,
          which in turn allows one to create Parts such as the background grid that cannot get mouse events but are still visible.
        </li>
        <li>Added <a>Diagram.zoomPoint</a> property, for controlling where to "focus" the diagram contents when changing the <a>Diagram.scale</a>.</li>
        <li>Added <a>Overview.drawsTemporaryLayers</a> property to disable drawing temporary layers.</li>
        <li>Fixed Overview's div setter when changing the div to null and back.</li>
        <li>Fixed the drawing of grid on Overviews.</li>
        <li><a>Diagram.makeImage</a> now correctly includes or excludes the grid based on showGrid and showTemporary when a parts list is used.</li>
        <li>The viewport now changes size appropriately on browser window maximize and restore.</li>
        <li>
          When a Diagram's div is hidden in such a way that its clientWidth or clientHeight go to zero,
          the old viewport width and height are kept at their old values until they are changed to nonzero values again.
        </li>
      </ul>
    </li>

    <li>
      Parts and GraphObjects:
      <ul>
        <li>
          Added <a>Layer.pickable</a> and <a>GraphObject.pickable</a> properties, to permit visual objects to be ignored by methods such as <a>Diagram.findObjectAt</a>,
          which in turn allows one to create Parts such as the background grid that cannot get mouse events but are still visible.
        </li>
        <li>Added methods for finding links between nodes: <a>Node.findLinksTo</a> (in one direction) and <a>Node.findLinksBetween</a> (in either direction).</li>
        <li>Added support for row and column separators in Table Panels -- see paragraph above.</li>
        <li>Added <a>Panel.findColumnForLocalX</a> and <a>Panel.findRowForLocalY</a>.</li>
        <li>Fixed the <a>Panel.data</a> binding of tooltip Adornments for GraphObjects created for items in a <a>Panel.itemArray</a>.</li>
        <li>Fixed <a>Placeholder</a> positioning when a Placeholder has a padding or the Group has a non-default locationSpot.</li>
        <li>Added <a>TextBlock.isUnderline</a> and <a>TextBlock.isStrikethrough</a>.</li>
        <li>Fixed some geometric arc calculations on Geometries with more than one Figure.</li>
        <li>Fixed deletion of label <a>Node</a>s from <a>Link</a>s to remove the key reference in the link data.</li>
      </ul>
    </li>

    <li>
      Layouts:
      <ul>
        <li>Added <a>Layout.isRealtime</a> property, to control whether an invalid layout is performed during some tool operations before a transaction is completed.</li>
        <li>Improved <a>LayeredDigraphLayout</a> detection whether links need to be routed around the "from" node or the "to" node.</li>

        <li><a>TreeLayout.roots</a> collection now holds <a>TreeVertex</a>es, although Nodes in that collection are still supported for compatibility.</li>
        <li>Added overridable <a>TreeLayout.initializeTreeVertexValues</a> method.</li>
        <li>Added overridable <a>TreeLayout.addComments</a> and <a>TreeLayout.layoutComments</a> methods.</li>
        <li>Added overridable <a>TreeLayout.arrangeTrees</a> method.</li>
      </ul>
    </li>

    <li>
      Tools and CommandHandler:
      <ul>
        <li>Added <a>ToolManager.dragSize</a> property, for controlling the distance at which the mouse may move before it is no longer considered a click but a drag.</li>
        <li>
          Added <a>ToolManager.WheelNone</a>; set <a>ToolManager.mouseWheelBehavior</a> to this value
          to ignore mouse wheel events without disabling scrolling or zooming by other means.
        </li>
        <li>Stopped <a>Tool.standardMouseOver</a> from being called with the initial <a>Diagram.lastInput</a>.</li>
        <li>On touch-supported devices, the default context menu no longer appears if the right-click was initiated with a mouse.</li>
        <li>Fixed <a>ActionTool</a> to work on a <a>Part</a>s when the whole Part has <a>GraphObject.isActionable</a> set to true.</li>
        <li>Improved <a>ToolManager.positionToolTip</a> and <a>ContextMenuTool.positionContextMenu</a> not to position it left of the left edge of the viewport.</li>
      </ul>
    </li>
  </ul>

  <hr />

  <h4>Changes for 1.1.12</h4>
  <ul>
    <li>Dragging a selection over a foreign Diagram no longer selects the objects until they are successfully dropped.</li>
    <li>Allowed Diagram and model listeners to modify the listener collection during execution.</li>
    <li>
      Fixes for <a>Diagram.makeImage</a>. Regardless of the Diagram.documentBounds value,
      inputting a size and position that are analogous to a Node's actualBounds will always print that node.
    </li>
  </ul>

  <h4>Changes for 1.1.11</h4>
  <ul>
    <li>
      Fixed <a>Diagram.zoomToRect</a> scaling to default to <a>Diagram.Uniform</a>, not <a>Diagram.UniformToFill</a>.
      Added an optional <i>scaling</i> argument to <a>Diagram.zoomToRect</a> so that you can choose the behavior.
    </li>
    <li>Fixed <a>GridLayout.doLayout</a> to take an <a>Iterable</a> collection of <a>Part</a>s.</li>
  </ul>

  <h4>Changes for 1.1.10</h4>
  <ul>
    <li>Fixed some cases of Link routing when <a>Link.adjusting</a> is <a>Link.End</a>.</li>
    <li>Fixed <a>Diagram.makeImage</a> when <a>Diagram.documentBounds</a> X and Y values are non-zero.</li>
  </ul>

  <h4>Changes for 1.1.9</h4>
  <ul>
    <li>Fixed route invalidation of not visible Links.</li>
    <li>Created a workaround for an IE10 bug that disallowed double clicking.</li>
    <li>Fixed the initialization of <a>Node.isTreeLeaf</a> when changing the category of a Node.</li>
    <li>Fixed <a>Diagram.grid</a>'s updating when toggling <a>GraphObject.visible</a>.</li>
  </ul>

  <h4>Changes for 1.1.8</h4>
  <ul>
    <li>Fixed <a>Diagram.findObjectsAt</a> and <a>Diagram.findObjectsIn</a> not to throw away the argument results collection.</li>
    <li>Fixed the ResizingTool Adornment location on Shapes with large strokeWidths.</li>
    <li>Fixed some nested objects (Panels, Picture, and Shapes) with a scale and a stretch value measuring incorrectly.</li>
    <li>
      Changed Links to be not seen when a connected Node is not seen, if the Link is a member of a Group,
      rather than appear to connect with the Group that contains it.
    </li>
  </ul>

  <h4>Changes for 1.1.7</h4>
  <ul>
    <li>Fixed addition and removal of Parts from the temporary layers causing the diagram's bounds to update.</li>
    <li>
      Initial Diagram setup such as <a>Diagram.initialContentAlignment</a> now occurs at the end of the first transaction,
      not at the transaction's start.
    </li>
    <li>Fixed <a>GraphObject.alignment</a> so that it correctly re-measures the GraphObject in all cases.</li>
    <li>Fixed updating of tooltips when the viewport changes without any mouse move.</li>
    <li>Fixed TableRow and TableColum visibility within Table Panels.</li>
    <li>
      TwoWay <a>Binding</a>s now update data properties by calling <a>Model.setDataProperty</a>,
      thereby updating other bindings on the same property.
    </li>
  </ul>

  <h4>Changes for 1.1.6</h4>
  <ul>
    <li>Added <a href="../samples/parseTree.html" target="_blank">Parse Tree</a> sample.</li>
    <li>
      Improved the <a href="../samples/stateChart.html" target="_blank">State Chart</a> and
      <a href="../samples/dynamicPorts.html" target="_blank">Dynamic Ports</a> samples to remember Link routes
      by using TwoWay Binding on the <a>Link.points</a> property.
    </li>
    <li>Fixed hiding Links in collapsed trees when the tree is inside a Group.</li>
    <li>Fixed <a>Diagram.position</a> setter incorrectly modifying values.</li>
  </ul>

  <h4>Changes for 1.1.5</h4>
  <ul>
    <li>Fixed Arcs with negative radii made using <a>Geometry.parse</a>.</li>
    <li>Corrected NaN locations when copying Parts under certain conditions.</li>
    <li>Fixed <a>Diagram.makeImage</a> padding and background grid rendering, and padding can no longer be negative.</li>
  </ul>

  <h4>Changes for 1.1.4</h4>
  <ul>
    <li>Fixed rules for <a>Part.addAdornment</a> or <a>Adornment.adornedObject</a> causing an Adornment to adorn a different part.</li>
    <li>Fixed <a>Diagram.minScale</a> and <a>Diagram.maxScale</a> when using a <a>Diagram.autoScale</a> values other than <a>Diagram.None</a></li>
    <li>Fixed incorrect autoScrolling when Diagram is zoomed.</li>
    <li>Added support for Android pinch-zooming and fixed <a>Diagram.zoomPoint</a> setting during pinch zoom.</li>
    <li>Fixed the drawing of the background Grid during <a>Diagram.makeImage</a></li>
  </ul>

  <h4>Changes for 1.1.3</h4>
  <ul>
    <li>Added <a href="../samples/sequenceDiagram.html" target="_blank">Sequence Diagram</a> sample.</li>
    <li>Improved behavior of <a>LinkingBaseTool.findTargetPort</a> when the <a>LinkingBaseTool.portGravity</a> is a small value.</li>
    <li>Improved "AvoidsNodes" link routing not to compute special route when default orthogonal routing does not cross over any nodes.</li>
    <li>
      Improved the behavior of <a>LinkReshapingTool</a> when dragging a reshape handle adjacent to the end point of a link
      that is connecting with a port for which <a>Spot.isNoSpot</a> is true.
    </li>
    <li>Fixed layouts with <a>Layout.isViewportSized</a> not redoing their layout when the Diagram's viewport changed size.</li>
  </ul>

  <h4>Changes for 1.1.2</h4>
  <ul>
    <li>Fixed <a>Geometry.stringify</a> not to round off coordinate values.</li>
    <li>Automatically set <a>Tool.diagram</a> for tools that are added to any of the three <a>ToolManager</a> tool lists.</li>
  </ul>

  <h4>Changes for 1.1.1</h4>
  <ul>
    <li>Many enhancements to the <a href="../samples/pipes.html" target="_blank">Pipes</a> sample.</li>
    <li>Improved "AvoidsNodes" link routing within groups.</li>
    <li>Double-click implemented on touch devices.</li>
    <li>Fixed copying collections declared to hold Objects.</li>
    <li>Fixed un-handled mouseup events not bubbling.</li>
    <li>Fixed updating Nodes that are modified in the middle of a Diagram update.</li>
    <li>Fixed positioning of asymmetric background Grid Panel patterns.</li>
  </ul>

  <h4>Changes for 1.1 since 1.0.*</h4>
  <ul>
    <li>
      <b style="color:red;">Incompatible changes in 1.1:</b>
      <ul>
        <li>
          The second argument of <a>Geometry.parse</a> defaults to false instead of true.
          The first argument is assumed to be a <b>GoJS</b> format geometry path string, not an SVG format string,
          even though the SVG strings are now a subset of the <b>GoJS</b> strings.
        </li>
      </ul>
    </li>
    <hr />
    <li>
      <b>Samples and documentation:</b>
      <ul>
        <li>Added <a href="../samples/IVRtree.html" target="_blank">IVR Tree</a> sample</li>
        <li>Added <a href="../samples/genogram.html" target="_blank">Genogram</a> sample</li>
        <li>Added <a href="../samples/comments.html" target="_blank">Comments</a> sample</li>
        <li>Added <a href="../samples/pipes.html" target="_blank">Pipes</a> sample</li>
        <li>Added <a href="../samples/canvases.html" target="_blank">Canvases</a> sample</li>
        <li>Added <a href="../samples/kittenMonitor.html" target="_blank">Kitten Monitor</a> sample</li>
        <li>Added <a href="../samples/doubleTreeJSON.html" target="_blank">Double Tree (JSON)</a> sample</li>
        <li>Added intro page about <a href="../intro/makingImages.html" target="_blank">Diagram Images</a></li>
        <li>Added intro page about <a href="../intro/printing.html" target="_blank">Local Printing</a></li>
        <li>Added intro page about <a href="../intro/serverSideImages.html" target="_blank">Server-side Image Creation</a></li>
        <li>Added intro page about <a href="../intro/geometry.html" target="_blank">Geometry Strings and Parsing</a></li>
      </ul>
    </li>
    <li>
      <b>Diagram and Layer:</b>
      <ul>
        <li>
          New named property arguments for <a>Diagram.makeImage</a> and <a>Diagram.makeImageData</a>
          can now specify "size", "maxSize", "padding", and "background" of the resulting Diagram image.
          The new named property arguments "position" and "scale" control what area of the document is drawn.
          The "parts" and "omitTemporary" property arguments control which Parts are drawn.
        </li>
        <li>Added <a>Diagram.computePartsBounds</a> method, to determine the area occupied by a collection of Parts.</li>
        <li>Added <a>Diagram.delayInitialization</a>, replacing the now deprecated <code>update</code> and <code>requestUpdate</code> methods.</li>
        <li>Added <a>Diagram.zoomToRect</a>, allowing easy changing of the viewport.</li>
        <li>
          Added <a>Diagram.initialScale</a> and <a>Diagram.initialPosition</a>, needed for more complex initialization
          and when <a>Diagram.delayInitialization</a> is used.
        </li>
        <li>Added <a>Layer.opacity</a> property, for setting multiplicative opacity on all Parts in a layer.</li>
        <li>Added double-click functionality for mobile devices</li>
        <li>Fixed <a>Diagram.zoomToFit</a> not updating the document bounds first.</li>
        <li>Fixed <a>Layer.findObjectsIn</a> not always returning the results of the <i>navigation</i> function.</li>
        <li>Fixed picking of <a>Shape</a>s by <a>Layer.findObjectsIn</a> where partial containment was incorrect.</li>
        <li>
          Fixed Diagram scrolling using PageUp/PageDown. Diagrams now scroll the correct amount regardless of scale and
          scroll left to right with Shift+PageUp/PageDown.
        </li>
        <li>Fixed removing a selected Part when deselecting it caused it to change layers.</li>
      </ul>
    </li>
    <li>
      <b>Parts:</b>
      <ul>
        <li>
          Added <a>Node.findTreeParentLink</a>, <a>Node.findTreeParentNode</a>, <a>Node.findTreeChildrenLinks</a>, <a>Node.findTreeChildrenNodes</a>,
          for your convenience in navigating a tree-structured diagram without worrying about <a>Diagram.isTreePathToChildren</a>.
          For example, see the updated <a href="../samples/localview.html" target="_blank">Local View</a> sample.
        </li>
        <li>Added <a>Link.isLabeledLink</a> property, equivalent to <code>link.labelNodes.count > 0</code>, but more convenient.</li>
        <li>Added <a>Part.findTopLevelPart</a> method.</li>
        <li>
          <a>Link.fromPortId</a> and <a>Link.toPortId</a> can now be set in a Link template -- if non-empty, the property will not be set with the value
          of <a>GraphLinksModel.getFromPortIdForLinkData</a> or <a>GraphLinksModel.getToPortIdForLinkData</a> unless that value is non-empty.
        </li>
        <li>
          Improved "ChangingSelection" and "ChangedSelection" <a>DiagramEvent</a>s not to happen when
          <a>Diagram.clearSelection</a> is called when no Parts are selected.
        </li>
      </ul>
    </li>
    <li>
      <b>GraphObjects and Geometry:</b>
      <ul>
        <li>Added <a>Shape.geometryString</a> property to more easily use SVG geometry path strings in your Parts.</li>
        <li>Added <a>Shape.isGeometryPositioned</a> property to position a Shape in a Position Panel ignoring the <a>Shape.strokeWidth</a>.</li>
        <li>Added <a>Shape.strokeDashArray</a> and <a>Shape.strokeDashOffset</a> properties, to draw customizable dashed or dotted lines.</li>
        <li>Fixed some cases of <a>GraphObject.stretch</a> improperly affecting <a>GraphObject.margin</a> calculations.</li>
        <hr />
        <li>
          Added <a>PathSegment.SvgArc</a> enum value to allow the creation of SVG-like arcs.
          <a>Geometry.parse</a> now parses SVG "a" commands as well as <b>GoJS</b>-specific commands.
          See <a href="../intro/geometry.html">Geometry Path Strings</a> for details.
        </li>
        <li>
          Added <a>Geometry.stringify</a> static method, as the opposite of <a>Geometry.parse</a>.
          This saves the complete state of a <a>Geometry</a> object, except for the <a>Geometry.spot1</a> and
          <a>Geometry.spot2</a> hints for <a>Shape</a> figures.
        </li>
        <li>Added <a>Geometry.fillPath</a> static method, to help convert SVG geometry path strings to GoJS.</li>
        <li>
          Added many "Backward..." arrowhead names, to make it easier to have double-ended arrow links.
          See the <a href="../samples/arrowheads.html" target="_blank">Arrowheads</a> sample.
        </li>
        <li>
          Added <a>Geometry.scale</a>, <a>Geometry.rotate</a>, <a>Geometry.offset</a>, <a>Geometry.normalize</a>,
          <a>Geometry.computeBoundsWithoutOrigin</a> methods, for easier explicit manipulation of a Geometry.
        </li>
        <li>Fixed scaling of <a>Geometry</a>s that contain Bezier curves.</li>
        <li>Fixed some computations of <a>Geometry.bounds</a> that contained multiple <a>PathFigure</a>s with arcs.</li>
        <hr />
        <li>Fixed <a>TextBlock</a> greeking (drawing lines instead of text at very small sizes) to be more accurately positioned.</li>
        <li>Improved <a>TextBlock</a> measurement of an empty string to have a small non-zero width, to allow empty strings to be clicked.</li>
        <hr />
        <li>
          Added <a>Panel.TableRow</a> and <a>Panel.TableColumn</a> Panel types, for use as elements of a Panel of type <a>Panel.Table</a>.
          These are particularly useful as the Panel type of <a>Panel.itemTemplate</a>.
        </li>
        <li>Added support for <a>Panel.itemArray</a> elements in Panels of type <a>Panel.Spot</a> and <a>Panel.Auto</a>.</li>
        <li>Added <a>Panel.opacity</a>, for affecting the opacity of the panel and all its elements.</li>
        <li>Fixed GraphObject clipping in Panels.</li>
      </ul>
    </li>
    <li>
      <b>Models:</b>
      <ul>
        <li>
          Added <a>TreeModel</a> to allow creating tree-structured graphs without the use of separate link data objects.
          Many (but not all) samples involving trees have been updated to make use of a TreeModel.
        </li>
        <li>
          Added <a>GraphLinksModel.archetypeNodeData</a> for automatically adding a node data to a <a>GraphLinksModel</a>
          when there is an unresolved reference in a link data.
          For example, see the updated <a href="../samples/beatpaths.html" target="_blank">Beat Paths</a> sample.
        </li>
        <li>
          Added <a>Model.setKeyForNodeData</a>, to allow you to change a node data key and automatically
          update all references in that model using the old key value to use the new one.
        </li>
        <li>Added <a>Model.addArrayItem</a>, for completeness -- this just calls <a>Model.insertArrayItem</a>.</li>
        <li>Added <a>Iterator.first</a> method for your convenience.</li>
        <li>Fixed <a>Model.setDataProperty</a> for objects in item Arrays in <a>GraphLinksModel</a>s.</li>
      </ul>
    </li>
    <li>
      <b>Layouts:</b>
      <ul>
        <li>Added <a>Layout.isRouting</a> property, to control whether Links are routed by the layout (default true).</li>
        <li>Added <a>TreeLayout.assignTreeVertexValues</a> overridable method, for vertex-specific control of tree layout.</li>
        <li>Added <a>LayeredDigraphLayout.assignLayers</a> overridable method, to control which layout layer each vertex should be in.</li>
        <li>Added <a>LayoutNetwork.findAllParts</a> method.</li>
        <li>
          Changed <a>TreeLayout.path</a> to default to new value <a>TreeLayout.PathDefault</a>,
          which chooses logical tree direction based on <a>Diagram.isTreePathToChildren</a>.
        </li>
        <li>
          Fixed alignment of vertexes in layouts that use networks to be based on center of <a>Part.locationObject</a>,
          except for <a>Group</a>s which align to the center of the whole Group.
        </li>
        <li>
          Fixed <a>CircularLayout</a> Packed arrangement occasionally causing an exception and
          improved it for full circles and for 3 or 4 nodes.
        </li>
      </ul>
    </li>
    <li>
      <b>Tools and Commands:</b>
      <ul>
        <li>
          Added <a>CommandHandler.zoomToFit</a> command, invoked by <code>Shift-Z</code>.
          Invoke it twice in a row to restore the original viewport.
        </li>
        <li>
          Added <a>CommandHandler.zoomFactor</a> property, so that you can easily change how much <a>CommandHandler.decreaseZoom</a>
          and <a>CommandHandler.increaseZoom</a> change the <a>Diagram.scale</a>.
        </li>
        <li>
          Added <a>InputEvent.down</a> and <a>InputEvent.up</a> properties,
          to make it easier to distinguish between mouse-down and mouse-up and other mouse events, and between key-down and key-up events.
        </li>
        <li>Added <a>DraggingTool.isGridSnapRealtime</a> to control whether the grid-snapping movement of parts occurs during the drag or only upon mouse-up.</li>
        <li>
          Added <a>DraggingTool.doDragOver</a>, <a>DraggingTool.doDropOnto</a>, <a>DraggingTool.computeMove</a>,
          and <a>DraggingTool.moveParts</a> overridable methods, for easier implementation of custom dragging tools.
        </li>
        <li>
          Added <a>LinkReshapingTool.originalPoint</a>, <a>LinkReshapingTool.originalPoints</a>,
          <a>ResizingTool.originalDesiredSize</a>, <a>ResizingTool.originalLocation</a>,
          <a>RotatingTool.originalAngle</a>, and <a>PanningTool.originalPosition</a> read-only properties,
          for convenience when overriding some tool methods or implementing corresponding <a>DiagramEvent</a> handlers.
        </li>
        <li>Extended <a>Tool.isBeyondDragSize</a> to take two optional <a>Point</a> arguments, defaulting to the first and the last input points in view coordinates.</li>
        <li>Improved tools to select a selectable containing <a>Group</a> when a <a>Part</a> is not selectable.</li>
        <li>
          Improved <a>ContextMenuTool.showContextMenu</a> and <a>ToolManager.showToolTip</a> to set the <a>Adornment</a>'s <a>GraphObject.scale</a>
          such that the apparent size stays the same regardless of the <a>Diagram.scale</a>.
        </li>
        <li>
          Improve <a>RelinkingTool</a> to disallow reconnecting not only to link label nodes on the Link itself,
          but also to any link label nodes on links connecting perhaps indirectly via label nodes to that Link.
        </li>
        <li>Fixed <a>RelinkingTool</a> to update positions of temporary nodes even before any mouse move occurs.</li>
        <li>Fixed <a>ClickCreatingTool</a>, when <a>ClickCreatingTool.isDoubleClick</a>, to check that both click points are close to each other.</li>
        <li>Fixed <a>DragSelectingTool</a>, when used modally, not to show the previous selection box upon mouse-down.</li>
      </ul>
    </li>
  </ul>

  <hr />

  <h4>Changes for 1.0.8</h4>
  <ul>
    <li>Fixed some Bezier <a>Link</a>s not displaying correctly.</li>
    <li>Fixed Position, Horizontal, and Vertical <a>Panel</a>s not respecting some padding values.</li>
    <li><a>Picture</a> now appropriately handles Canvas elements as the <a>Picture.element</a>.</li>
    <li>Fixed <a>Panel.Auto</a> measuring incorrectly when the main object was a <a>Shape</a>.</li>
    <li>Fixed <a>ContextMenuTool</a> to also raise a <a>DiagramEvent</a> when a context click happens.</li>
    <li>Fixed <a>Placeholder</a> objects not respecting padding when not part of a <a>Group</a>.</li>
  </ul>

  <h4>Changes for 1.0.7</h4>
  <ul>
    <li>Fixed asynchronous <a>Picture</a> loading failing to update the <a>Diagram.documentBounds</a>.</li>
    <li>Fixed <a>DraggingTool</a> to move Parts to the mouse-up location, not the last mouse-move location.</li>
    <li>Use <code>Array.isArray(x)</code> instead of <code>x instanceof Array</code> to check for Arrays created in different frames.</li>
    <li>Fixed replacing the model not respecting <a>Diagram.contentAlignment</a>.</li>
  </ul>

  <h4>Changes for 1.0.6</h4>
  <ul>
    <li>Added "Links to Links" sample.</li>
    <li>Added "Shop Floor Monitor" sample.</li>
    <li>
      Changed a <a>Link</a> to have a jump-over or a jump-gap with another link if they do not share the same start points or the same end points,
      even if they connect with the same node.
    </li>
    <li>Improved <a>Diagram.add</a> to check that the argument <a>Part</a> is not already a part of a different <a>Diagram</a>.</li>
    <li>Fixed copy and paste not to copy partly or fully disconnected <a>Link</a>s.</li>
    <li>Fixed the updating of jump-overs or jump-gaps in other links after adding or removing links.</li>
    <li>Fixed undo/redo changes of Z-ordering of <a>Panel</a> elements.</li>
    <li>Fixed <a>Group</a> Z-ordering when adding groups or switching layers.</li>
    <li>Fixed link validation check of <a>GraphObject.fromMaxLinks</a> or <a>GraphObject.toMaxLinks</a> when links were already connected in both directions.</li>
    <li>Fixed an issue with Table <a>Panel</a>s not accounting for <a>GraphObject.padding</a> properly.</li>
  </ul>

  <h4>Changes for 1.0.5</h4>
  <ul>
    <li>Added "HTML Interaction" sample.</li>
    <li>Added <a>Diagram.focus</a> method.</li>
    <li>Improved more API documentation.</li>
    <li>Improved error checking by <a>Panel.add</a> to disallow sharing of a <a>GraphObject</a> by <a>Panel</a>s.</li>
    <li>Setting <a>Part.category</a> of a <a>Node</a> or <a>Link</a> or simple <a>Part</a> now also tries to set the category of any bound data in the model.</li>
    <li>Fixed dynamically changing the <a>Part.category</a> of a <a>Link</a> that connects with specific ports to remember those port Ids.</li>
    <li>Fixed <a>Diagram.skipsUndoManager</a> property setter to also set the Diagram's Model's <a>Model.skipsUndoManager</a>.</li>
    <li>Fixed some issues relating to scrollbars, especially on small diagrams.</li>
  </ul>

  <h4>Changes for 1.0.4</h4>
  <ul>
    <li>Improved API documentation for some classes.</li>
    <li>Improved error message when running in browsers without support for Canvas.</li>
    <li>Fixed hit testing of individual <a>Panel.Grid</a> Panels</li>
    <li>Fixed the default touch context menu to no longer scroll to the top of the page when a button was pressed.</li>
    <li>Changed the way GoJS handles event coordinates, increasing accuracy on complex HTML pages.</li>
  </ul>

  <h4>Changes for 1.0.3</h4>
  <ul>
    <li>Added "Planogram" sample.</li>
    <li>Fixed <a>ResizingTool</a> modifying the saved <a>ResizingTool.minSize</a>.</li>
    <li><a>Diagram.selection</a> read-only-ness is now enforced.</li>
    <li>Fixed <a>Panel.Table</a> <a>Panel</a> allocating an incorrect size for some stretched objects.</li>
    <li>Fixed <a>TextBlock</a> not respecting maximum height.</li>
    <li>Fixed <a>Panel.Grid</a> incorrect hit testing (object picking).</li>
  </ul>

  <h4>Changes for 1.0.2</h4>
  <ul>
    <li>Added "Swim Lanes" sample.</li>
    <li>Fixed <a>DraggingTool</a> updating the bounds of a containing <a>Group</a> when <a>Group.computesBoundsAfterDrag</a> is true.</li>
    <li>Fixed a single <a>Shape</a> inside of a <a>Panel.Auto</a> <a>Panel</a> getting the wrong size if only <a>GraphObject.minSize</a> was set.</li>
    <li>Improved measurement of nested <a>Group</a>s during automatic layouts.</li>
  </ul>

  <h4>Changes for 1.0.1</h4>
  <ul>
    <li>Added "Record Mapper" sample.</li>
    <li>Removed deprecated "closed" argument to <a>PathFigure</a> constructor.</li>
    <li>Fixed <a>LayeredDigraphLayout</a> routing of Bezier <a>Link</a>s connecting with visible <a>Node</a>s inside <a>Group</a>s.</li>
    <li>Fixed sizing <a>Panel.Auto</a> <a>Panel</a>s with a <a>Panel</a> as the main element.</li>
    <li>Initialization bugfixes.</li>
  </ul>

  <hr style="margin-top:50px;" />
</div> <!-- end container -->
</body>
</html>
